Temps d'acces de lecture sur socket

Signaler
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
-
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
-
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....

 

3 réponses

Messages postés
178
Date d'inscription
mardi 16 août 2005
Statut
Membre
Dernière intervention
25 août 2010
1
Tu peux enchainer chaque transmission par un send /recv (envoi du message, attente acquittement).
 Comme ca aucun souci..
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
3
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.
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
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