Probleme Architecture client Serveur Multithread

cs_kawito Messages postés 24 Date d'inscription dimanche 20 juillet 2003 Statut Membre Dernière intervention 13 décembre 2005 - 18 déc. 2003 à 18:50
vidarusny Messages postés 31 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 3 décembre 2009 - 20 déc. 2003 à 22:14
Bonjour,

j'ai fais un client serveur TCP qui doit gerer n connexions(win32 c++) winsowk1.1.

le serveur gere les connexions a travers un thread accept
qui lance dynamiquement des thread de reception de chaque nouveau client.



en image (en esperant qu'elle s'affiche?):

l'echange des info a la connexion d'un client se passe bien,
mais lorsque que le serveur envoie un message, les clients connectée recoivent 1 message sur 2.

par contre les clients envoie a coup sur leur messages au serveur, mais une fois sur deux au autre clients connectés.

je perd donc des messages qui pourtant sont envoyés sans erreurs et de la bonne longueur ?
mais ce message n'arrive jamais au client !

je pense que cela vient des send a suivre qui foute le bordel
je resume:

Serveur client

send("MESSAGE_CHAT")--------> thread recv (commande)
traitement commande
"MESSAGE_CHAT"
send("Bonjour ça va") --------------------> recv(data)
afficher message

est ce qu'il faut respecter l'alternace de send et recv ?
Serveur client

send() ----> recv()
recv <----- send()
send()------->recv()

s'il le faut ? ,lorsque je fais des envoie depuis le processus principal ,pas de probleme,mais je ne peut pas faire de recv() dans le processus principal car le thread de reception et deja en attente d'une donnée ?

j'ai bien essayer de mettre le thread en pause,
puis faire mes send et mes recv,puis de le relancer,mais pas mieux!

kawito

1 réponse

vidarusny Messages postés 31 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 3 décembre 2009
20 déc. 2003 à 22:14
En voila une explication bien longue. Pour la réponse (je suis pas sûre d'avoir tous compris), oui il faut respecter les send et les recv, mais la question est quel mode utilise? Bon a priori je dirait un mode connecter, si tels est le cas lorsque ton client demande une connection a ton serveur, il ne peut plus se connecter à un autre serveur tant que tu n'a pas libérer la connection (idem poiur le serveur!).
En clair qu'en un client et un serveur se "parlent" il n'entende rien d'autre, ce qui peut effectivement expliquer que des message soit perdu (quoique c'est un problème qui est plus habituel dans le mode déconnecter)
enfin tu peut avoir plus d'explication à cette adresse :
http://www.themanualpage.org/reseau/reseau_concepts.php3

Voila si c'est pas ca alors c'est la gestion de ton thread.
0
Rejoignez-nous