LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 2013
-
27 août 2007 à 13:24
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 2013
-
27 août 2007 à 16:41
Bonjour,
Voila je suis confronté a un probleme sur un programme de communications via tcp/ip.
Mon probleme est lié au fait que j'ai plusiseurs threads en meme temps pour lire sur différentes socket.
Et en effectuant des traces il arrive par moment que lors de ma lecture sur le thread je me retrouve avec 2 messages collés et je ne traite que le premier:
par exemple buffer de reception 01-msg-blablabla02-msg-bliblibli
moi je repere le 01 et traite le message 01 et du coup le message 02 passe a la trappe!
comment resoudre ce probleme ? a part en regardant si le buffer de reception est plus grand que ce que j'attends (taille de messages fixes donc)
et si oui, regarder si la suite de la trame ne correspond aps a un autre message....
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 27 août 2007 à 16:29
Salut,
Il faut avoir une vision plus générale du probleme (qui n'en est pas
un): rien ne te dis qu'un send sur un socket provoquera un recv a
l'autre bout du socket. Ca veut dire que tu peux recevoir un ou
plusieur 'messages' lors d'un recv, voire même un morceau de 'message'
incomplet. Ce concept de message n'existe pas au niveau TCP, c'est donc
a ton application de gerer tout ca.
Généralement on envoie la taille du message avant celui ci ou alors on
utilise des separateurs de messages (comme \r\n, utilise par plein de
protocols de type texte). Mettre en place un systeme d'acquittement ca
marcherait, mais ca ralentirait inutilement le prog.
LaTatadu91
Messages postés968Date d'inscriptionjeudi 20 mai 2004StatutMembreDernière intervention26 avril 20131 27 août 2007 à 16:41
yes effectivement, j'ai donc coder en qlq lignes si la taille du message reçu n'est aps celle attendu on decrypte la fin de la trame...
ca semble etre le mieux!
par contre heureusement je ne suis aps tomber sur un cas inverse avec un message incomplet. je ne peux aps faire du send receive car je ne peux pas faire un truc bloquant il faut que mon appli tourne meme si des messages n'arrivent pas ...
merci pr vos explications