Socket communication Appli Client/Serveur - C#/.NET managed - Programmation
MarshPosté le 26-05-2008 à 19:36:54
Bonjour;
Je suis en train de développer une appli client/serveur de messagerie instantannée Like MSN. J'ai consulter énormément de topic, tuto et cours mais je suis sur une erreur et aussi quelques interrogations. En effet j'ai trouvé beaucoup d'exemple concernant des applications où le serveur "se contenter" de mettre en relation plusieurs client mais dans le cas d'une application de messagerie instantannée l'application est à la fois cliente et serveur car chaque client doit pouvoir envoyer et recevoir des messages.
J'utilise donc les sockets en mode asynchrone et le démarrage du serveur se passe bien :
Code :
//Création de la socket
this.ServerSocket = new Socket(AddressFamily.InterNetwork,
MessageBox.Show("Serveur démarré en : "+ipAddress);
Ensuite un client se connecte au serveur (typiquement en double clic sur un contact de sa liste) ou en rentrant l'ip a contacter (le port n'étant pas configurable mais c'est un détail pour l'instant)
Code :
this.SocketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipadress;
//On récupere l'adresse ip a contacter
ipadress = IPAddress.Parse(ip_destinataire.Text);
this.SocketClient.BeginConnect(new IPEndPoint(ipadress, 8000), new AsyncCallback(ConnectCallback), this.SocketClient);
Venant en au problème l'envoi d'un message du client au serveur et inversement. Une fois que le client est connecté j'ouvre un Nouvelle Form "Message" qui sert a saisir le message à envoyer. Mais le serveur n'est pas encore en attente de message et je ne sais pas quand le faire pour moi le plus simple étant de mettre le serveur en attente dès que le client ce sera connecté au serveur (même s'il peut se connecter et rien écrire finalement).
J'ai donc une fonction ReceiveMessage()
Code :
publicvoid ReceiveMessage()
{
if (this.SocketClient != null && this.SocketClient.Connected)
{
//On se met en attente d'un message
this.SocketClient.BeginReceive(this.readbuf, 0, this.readbuf.Length, SocketFlags.None, new AsyncCallback(ReceiveMessageCallback), this.SocketClient);
}
else
{
MessageBox.Show("Client non connecté" );
}
}
Qui est appelé lorsqu'un client vient de se connecter
Voilà je sais que c'est un peu long mais j'essaye d'être précis et c'est pas facile d'expliquer un projet en cours de réalisation. N'hésitez pas de faire des suggestions elles seront bienvenu...
Marsh Posté le 26-05-2008 à 19:36:54
Bonjour;
Je suis en train de développer une appli client/serveur de messagerie instantannée Like MSN. J'ai consulter énormément de topic, tuto et cours mais je suis sur une erreur et aussi quelques interrogations.
En effet j'ai trouvé beaucoup d'exemple concernant des applications où le serveur "se contenter" de mettre en relation plusieurs client mais dans le cas d'une application de messagerie instantannée l'application est à la fois cliente et serveur car chaque client doit pouvoir envoyer et recevoir des messages.
J'utilise donc les sockets en mode asynchrone et le démarrage du serveur se passe bien :
Ensuite un client se connecte au serveur (typiquement en double clic sur un contact de sa liste) ou en rentrant l'ip a contacter (le port n'étant pas configurable mais c'est un détail pour l'instant)
Venant en au problème l'envoi d'un message du client au serveur et inversement.
Une fois que le client est connecté j'ouvre un Nouvelle Form "Message" qui sert a saisir le message à envoyer.
Mais le serveur n'est pas encore en attente de message et je ne sais pas quand le faire pour moi le plus simple étant de mettre le serveur en attente dès que le client ce sera connecté au serveur (même s'il peut se connecter et rien écrire finalement).
J'ai donc une fonction ReceiveMessage()
Qui est appelé lorsqu'un client vient de se connecter
et j'ai l'erreur suivante :
Voilà je sais que c'est un peu long mais j'essaye d'être précis et c'est pas facile d'expliquer un projet en cours de réalisation.
N'hésitez pas de faire des suggestions elles seront bienvenu...
Merçii