Vous êtes sur la page 1sur 7

C SHARP

Création d’un projet Serveur et Client


1- Montage du Serveur
2- Montage du client
_______________________________

Intro

 Espace de nom (namespace)


Syntaxe :
namespace nomEspace
{
public class Nomclass
{
implémentation
}
}
 Convention de nom
Syntaxe:
nom.NomEntreprise.Nomsystem.nomcouche pour les produits personalisés.
Nom1.Nom2.NomN pour les produits généralises
Ex : com.unasmoh.SystemGestionUnasmoh.domaine
 Paradigne de programmation en couche
C'est la représentation des couches du modèles OSI en programmation facilitant la repartition et la distribution
 Les couches
- Domais
- Acces au données(Dal ”data acces layer”)
- Session(Application ou Controlleur).
- Presentation(vue / IHM)
- Réseau (Interface)
- Service Technique
 Comment programmer
1) Domaine
2) Dal
3) Session
4) Réseau
5) Service(facultative)
6) Présentation
Création du serveur (ex: unasmoh)
1- Aller sur le disque dur et créer un repertoire ayant le nom du projetUnasmoh
2- A l’interieux de ce fichier créer 2 sous répertoires : Serveur, Client
3- Lancer visual studio , créer un projet nomme ProjetServeur a sauvegarder dans le repertoire serveur
4- renommer le fichier Form1 en FenServeur
5- Ajouter une classe Etudiant et ajouter aussi l’epace de nom.domaine(la classe doit être publique)
public class Etudiant
namespace com.unasmoh.systemgestionunasmoh.domaine
6- Ajouter une classe Etudiant Dal et ajouter aussi l’epace de nom.dal(la classe doit être publique)
public class EtudiantDal
namespace com.unasmoh.systemgestionunasmoh.dal
7- Ajouter une classe Controleur Etudiant et ajouter aussi l’epace de nom.application ou session ou
controleur (la classe doit être publique)
public class ContoleurEtudiant
namespace com.unasmoh.systemgestionunasmoh.application
8- Ajouter un projet de type class library nommé ProjetInterface
- Aller sur file > add > new project
- Choisisser class library
- Renommer la Class1 en InterfaceEtudiant
- Remplacer le mot class par interface
public interface InterfaceEtudiant
9- Ajouter une classe Service Technique et ajouter l’espace de nom
namespace com.unasmoh.systemgestionunasmoh.service
class ServiceTechnique
10- Dans la classe Etudiant declarer les attributs et créer leurs accesseurs et mutateurs.
private string nom;
private string prenom;
private string sexe;

public Etudiant() { }
public Etudiant(string nom, string prenom, string sexe)
{
this.nom = nom;
this.prenom = prenom;
this.sexe = sexe;
}

public string getnom()


{
return nom;
}
public void setnom(string nom)
{
TYPE PERSONAL NAME
this.nom = nom;
}
public string getprenom()
{
return prenom;
}
public void setprenom(string prenom)
{
this.prenom = prenom;
}
public string getsexe()
{
return sexe;
}
public void setsexe(string sexe)
{
this.sexe = sexe;
}
11- Dans la classe EtudiantDal Utiliser l’espace de nom de la couche domaine(etudiant)
using com.unasmoh.systemgestionunasmoh.domaine;
- Créer un objet (avec le nom de la classe du domaine)(“Etudiant”)
public Etudiant etud;
- Ajouter une référence a MySql.Data.dll
- Utiliser les espaces de nom de MySql
using MySql.Data;
using MySql.Data.MySqlClient;
- Declarer les variables chaine de connection, MySqlConnection, MySqlCommand, MySqlDataReader
de manière public et static
public static string chaine = "server=Localhost; DataBase=GestionUnasmoh; user id=root";

public static MySqlConnection con = null;


public static MySqlCommand com = null;
public static MySqlDataReader rd = null;
12- Créer une methode d’insertion dans la classe EtudiantDal, cette methode doit être public et static (toutes
les méthodes supplémentaires concernant cet entité seront implémenté dans la classe EtudiantDal)

public static string AjouterEtudiant(Etudiant etud)


{
string message = "";
string req = "insert into Etudiant values('" + etud.getnom() + "','" + etud.getprenom() + "','" +
etud.getsexe() + "')";

MySqlConnection con = new MySqlConnection(chaine);


MySqlCommand com = new MySqlCommand(req, con);
int verifier = 0;
try
{
con.Open();
verifier = com.ExecuteNonQuery();
if (verifier != 0)
{
message = "insertion reussie";
}
}
catch (MySqlException ex)
{
message = "Erreur" + ex;
}
finally
{
if (verifier != 0)
{
con.Close();

TYPE PERSONAL NAME


}

}
return message;

}
13- Aller dans la couche Application ou session ou controleur (class ControleurEtudiant)
utiliser l'espace de nom du domaine et du Dal.
using com.unasmoh.systemgestionunasmoh.domaine;
using com.unasmoh.systemgestionunasmoh.dal;
- Declarer un objet du domain(Etudiant)
Etudiant et;
- Instancier l'objet du domaine dans un constructeur
public ControleurEtudiant()
{
Etudiant et=new Etudiant ();
}
14- Reimplémenter les méthodes(setter, getter et les méthodes supplementaires)
//setter
public void modifiernom(string nom)
{ this.et.setnom(nom);
}
public void modifierprenom(string prenom)
{
this.et.setprenom (prenom );
}
public void modifiersexe(string sexe)
{
this.et.setsexe(sexe);
}
// getter
public string retournernom() {
return this.et.getnom();
}
public string retournerprenom()
{
return this.et.getprenom();
}
public string retournersexe()
{
return this.et.getsexe();
}
// methode AjouterEtudiant
public string AjouterEtudiant(string nom, string prenom, string sexe)
{ this.et = new Etudiant (nom, prenom, sexe);
return EtudiantDal.AjouterEtudiant(et);

15- Aller dans l'interface correspondant a l'entité implementé(Etudiant) et mettre l'entête de toutes les
méthodes implémentées dans le contoleur suivi d’un point virgule(;)

public interface InterfaceEtudiant


{
void modifiernom(string nom);
void modifierprenom(string prenom);
void modifiersexe(string sexe);

string retournernom();
string retournerprenom();
string retournersexe();
string AjouterEtudiant(string nom, string prenom, string sexe);

TYPE PERSONAL NAME


}
16- Ajouter une référence entre l’interface de la classe implémenté et le serveur,puis faire
hériter le controleur du projet InterfaceEtudiant ( avec MarshallByRefObject)
Clique droit sur ProjetServeur > Add reference > Solution > Cocher ProjetInterface
Puis Build le projet (Ctrl + shift + b)
A côté du nom de la class ControleurEtudiant on fait hériter le controleur avec “:”
suivi de “MarshallByRefObject” puis virgule “,” puis le nom du projet de l’interface
“ProjetInterface” point “.” Suivi du nom de la class selon l’inface implémenté
“InterfaceEtudiant”

public class ControleurEtudiant : MarshalByRefObject,ProjetInterface.InterfaceEtudiant

17- Aller sur la Fenêtre du serveur(FenServeur) Double cliquer et ajouter une référence a
système.Runtime.Remoting
Clique droit sur ProjetServeur > Add reference > Assemblies > System.Runtime.Remoting
18- Utiliser les espaces de noms de Remoting et de la couche Application(session ou controleur)
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using com.unasmoh.systemgestionunasmoh.application;

19- Declarer un objet public de la couche session ou application

public partial class FenServeur : Form


{
public ControleurEtudiant controEtud;
public FenServeur()
{
20- Apres la methode InitializeComponent créer un canal qui aura le port comme paramètre(1069)
TcpChannel canaltcp = new TcpChannel(1069) ;
21- Enregistrer le canal
ChannelServices .RegisterChannel (canaltcp );
22- Exposer l'objet tout en fixant le mode d'ouverture (Singleton)
RemotingConfiguration.RegisterWellKnowServiceType
(Typeof(NomControleur),"NomAexposer",WellKnowObjetMode.Singleton);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ControlleurEtudiant),
"objetudiant", WellKnownObjectMode .Singleton );

Terminé, Maintenant place au Client! 😊

Création du client
1- Lancer visual studio , créer un projet nomme ProjetClient a sauvegarder dans le repertoire client
2- Renommer le fichier Form1 en FenPrincipale
3- Ajouter une classe Service Technique et ajouter aussi l’epace de nom.service(la classe doit être
publique)
namespace com.unasmoh.systemgestionunasmoh.service
public class ServiceTechnique
4- Ajouter un projet de type class library nommé ProjetInterface
- Aller sur file > add > new project
- Choisisser class library
- Renommer la Class1 en InterfaceEtudiant
- Remplacer le mot class par interface
public interface InterfaceEtudiant
TYPE PERSONAL NAME
5- Tout comme pour la classe InterfaceEtudiant du cote du serveur nous allons mettre les entêtes de
toutes les méthodes implémentées dans la classes ControleurEtudiant(coté serveur) suivi d’un point
virgule(;)
void modifiernom(string nom);
void modifierprenom(string prenom);
void modifiersexe(string sexe);

string retournernom();
string retournerprenom();
string retournersexe();
string AjouterEtudiant(string nom, string prenom, string sexe);
6- Ajouter une référence entre l’interface de la classe implémenté et le Client
Clique droit sur ProjetClient > Add Reference > Solution > Cocher ProjetInterface
Puis Build le projet (Ctrl + shift + b)
7- Aller sur la Fenêtre du client(FenPrincipale) Double cliquer et ajouter une référence a
systeme.Runtime.Remoting
Clique droit sur ProjetServeur > Add reference > Assemblies > Systeme.Runtime.Remoting
8- Utiliser les espaces de noms de Remoting
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
9- Ajouter l’espace de nom de la couche présentation
namespace com.unasmoh.systemgestionunasmoh.presentation
10- Utiliser l’espace de nom de la couche du domaine dans la classe Program.cs
namespace com.unasmoh.systemgestionunasmoh.
11- Declarer une variable de type de l'interface
public ProjetInterface.NomInterface nomVariable;
public ProjetInterface.InterfaceEtudiant interetud;
12- Après la methode InitializeComponent créer un canal qui n’aura pas de port()
TcpChannel canaltcp = new TcpChannel() ;
13- Enregistrer le canal
ChannelServices .RegisterChannel (canaltcp );

14- Récupérer l’objet exposé tout en spécifiant l’adresse du serveur.

nomVariable(variable de type de l’interface)=(ProjetInterface.NomInterface)Activator.


GetObjet(typeof(AjouterInterface.NomInterface);
"tcp:// Adresse:#Port/NomObjet Expose au serveur");

interetud = (InterfaceEtudiant)Activator.GetObject(typeof(ProjetInterface.InterfaceEtudiant),
"tcp://LocalHost:1069/objetudiant");

15- Créer l’interface permetant de saisir les informations selon les attributs(nom,prenom,sexe)
- TextBox pour nom et prénom (txtnom et txtprenom)
- ComboBox pour sexe (cmbsexe)
- Button pour effectuer l’enregistrement(btnenregistrer)
(Libre a vous de dessiner l’interface)

TYPE PERSONAL NAME

16- Double clique sur le bouton enregistrer puis Récuperer les variables dans les champs
string nom = txtnom.Text;
string prenom = txtprenom.Text;
string sexe = cmbsexe.Text;
17- Affichage de l’objet interface qui aura la méthodes ajouter etudiant qui se trouve dans la couche Dal
et qui aura comme paramètre les variable declarées
MessageBox.Show(interetud.AjouterEtudiant(nom, prenom, sexe));
18- Puis nettoyer les champs
txtnom.Clear();
txtprenom.Clear();
cmbsexe.SelectedIndex = -1;
(vue générale des codes du bouton enregistrer)
private void btnenregistrer_Click(object sender, EventArgs e)
{
string nom = txtnom.Text;
string prenom = txtprenom.Text;
string sexe = cmbsexe.Text;

MessageBox.Show(interetud.AjouterEtudiant(nom, prenom, sexe));


txtnom.Clear();
txtprenom.Clear();
cmbsexe.SelectedIndex = -1;
}
Terminé du côté client 👌.

Pour tester notre programme nous allons lancer le serveur en premier, aller sur le projet serveur et démarrer
le.

Windows va vous envoyer un message pour autoriser l’accès au firewall, cliquer sur Allow acces pour autoriser l’accès.

Lancer l’application du projet client et insérer des données. Puis cliquer sur enregistrer.

TYPE PERSONAL NAME

Voilà ! tout est OK! Vérifions maintenant la base de donnée.

Cool, c’est bien là.

Vous aimerez peut-être aussi