Serveur/client

Résolu
Florentcrochet Messages postés 7 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 5 avril 2008 - 6 févr. 2008 à 20:58
Florentcrochet Messages postés 7 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 5 avril 2008 - 7 févr. 2008 à 13:07
Bonjour ,

Mon but est de creer une connection entre un serveur et un client permettant d'envoyer et recevoir des messages.

Avec le modèle asynchrone , je rencontre beaucoup trop de problème de codage même si d'apres ce que j'ai compris il est plus sur.J'ai cherché des réponse suite à ces problèmes et la plupart des codeurs ont certifié avoir réussi purement et simplement avec la méthode synchrone.

Je vous demande donc si vous connaissez un tutorial (que je n'ai pas trouvé) ou si vous avez un petit exemple simulant tout simplement , une connection entre deux socket puis l'envoi de données de l'un a l'autre avec retour des données en synchrone (sans le callback donc).Je ne vous demande pas la lune , juste les fonction nécéssaires : écoute , connection , envoi ,reception , si j'ai bien compris.

Merci d'avance.Au revoir.

3 réponses

cs_wizad Messages postés 355 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 14 avril 2009
7 févr. 2008 à 09:48
Je ne sait pas quels sont tes contraintes de développement mais je peux te suggérer de regarder vers cette librairie : http://www.csharpfr.com/codes/NETACCESS-BETA-LIBRAIRIE-APPLICATION-CLIENTS-SERVEUR_44032.aspx
Elle permet d'implémenter un système clients/serveur complet.
3
Florentcrochet Messages postés 7 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 5 avril 2008
7 févr. 2008 à 13:05
Re , je comprend pas grand chose au code lol.
VOila mon code , et l'erreur lors du callback de connection :
Le but est de connecter serveur et client , et d'envoyer "buf" au serveur . Le but est aussi de pouvoir envoyer du serveur au client.
public

classReseau{

Numberone Nbo;
// déclaration d'un objet de type numberone

public
Socket socketServ =
new
Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);

public
Socket socketCli =
new
Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);

public
Socket socketToCli =
new
Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);

public
bool bType;
// variable visant à contenir le type : serveur ou client défini dans config

public
int read ;
// Variables d'envoi/reception

public
int send ;

public
byte[] buf = { 155 };
// tableau de Données à envoyer

public
byte[] IP =
new
byte[4];
//tableau nécéssaire a IPadress

public
byte[] BufRecept =
new
byte[1];
// Tableau visant a recevoir des données 

public
enum
TEtatConnection {CONNECTE , DECONNECTE , ECOUTE };
// Enumeration pour les états cde connection

public
TEtatConnection Etat;

public Reseau(
Numberone Nb){

Nbo = Nb;

Etat =

Reseau.
TEtatConnection.DECONNECTE;
//Affecte le statut deconnecté}

 

.//Serveur

// Fonction qui permet de mettre en écoute

public
void Ecoute(){

System.Net.

IPAddress ipAdd =
new System.Net.
IPAddress(IP);
// définie l'ipSystem.Net.

IPEndPoint EP =
new System.Net.
IPEndPoint(ipAdd, 503);socketServ.Bind(EP);

// Lance l'écoute sur le port voulu , cherchant l'adresse ip rentréesocketServ.Listen(1);

// Nombre de connections que le serveur peut prendre en même tempssocketServ.BeginAccept(

new
AsyncCallback(
this.connexionAcceptCallback), socketServ);
// Lance l'attenteEtat =

TEtatConnection.ECOUTE;}

// Fonction mettant fin à l'attente ,accepte la connection

private
void connexionAcceptCallback(
IAsyncResult asyncResult)  ERREUR : L'objet IAsyncResult n'a pas été retourné de la méthode  asynchrone correspondante sur cette classe.
Nom du paramètre : asyncResult{

socketCli = socketServ.EndAccept(asyncResult);

}

 

 

 

 

//Client

//Fonction de connection

public
void Connexion(){

System.Net.

IPAddress ipAdd =
new System.Net.
IPAddress(IP);
// définie l'ipSystem.Net.

IPEndPoint EP =
new System.Net.
IPEndPoint(ipAdd, 503);socketCli.BeginConnect(EP,

new
AsyncCallback(connexionAcceptCallback), socketCli);

//Affecte l'état connecté si on est connecté à la socket client

if (socketCli.Connected){

Etat =

TEtatConnection.CONNECTE;}

}

// Fonction mettant fin à la connection au serveur,ils sont connecté

private
void connexionConnectCallback(
IAsyncResult asynresult){

socketCli.EndConnect(asynresult);

}

// Fonction d'envoi reception

// Envoi d'un message Client au serveur

public
void EnvoiMessage(){

socketServ.BeginReceive(BufRecept, 0, 1,

SocketFlags.None,
new
AsyncCallback(ReceiveCallback), socketServ);
// Commence la réceptionsocketCli.Send(buf);

//envoi le tableau de byte buf

}

//Fonction de rapel pour la reception d'un mesage

private
void ReceiveCallback (
IAsyncResult asyncResult){
Nbo.lblTest.Text ASCIIEncoding.ASCII.GetString(BufRecept, 0, 1);read socketServ.EndReceive(asyncResult);

}

}
3
Florentcrochet Messages postés 7 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 5 avril 2008
7 févr. 2008 à 13:07
ENfin ce n'est pas une erreur , le programme est lancé sans aucune erreur ni avertissement . Mais lors de l'execution ce problème aparait.
3
Rejoignez-nous