Winsock: trame incomplète ??

themaste Messages postés 130 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 8 juillet 2008 - 13 mai 2003 à 10:53
psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009 - 21 mai 2003 à 19:23
Salut a tous!!

J'aimerais savoir si les messages RECUES par winsock sont de facon SUR toujours complete ??

Et si non, existe-t-il un moyen pour assurer le faire de recevoir un message en entier, du mme style que la methode de sendComplete du composant?

Thx!!

5 réponses

themaste Messages postés 130 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 8 juillet 2008 2
13 mai 2003 à 11:30
ah ok... c peut etre un pbl..mais donc si je comprds bien, si le message depasse le buffer, il est coupé en deux 50/50? ou alors il coupe jusqu'a qu'il ne puisse plus en mettre, et passe au reste ensuite?

Et dans le cas de coupure.. comment puis-je recuperer deux buffers d'affilés?
1
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
13 mai 2003 à 11:15
le buffer de winsock fait 2 ou 4 ko (je sais plus) dc si ton message est + grands il faut le lire le buffer plusieurs fois !

:clown) BasicInstinct :clown)
0
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
13 mai 2003 à 11:35
le buffer est rempli jusqu'au bout

et d'ailleur si tu recoit 2 messages d'affilé (petit) sans avoir lu le buffer au milieu, tu recoit tes 2 messages concatené!

je dois avoir 1 exemple qque part !

:clown) BasicInstinct :clown)
0
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
13 mai 2003 à 11:39
v'la 1 exemple, tiré dun objet com que j'ai créé y'a longtemp.
je passe directement par les api winsock et je scrute le buffer en permanance.

Private Declare Function recv Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal flags As Long) As Long

Private Function ReadSocket(NumSocket As Long) As String
Dim X As Long, ReadBuffer(1 To 1024) As Byte
Dim buffer As String
ReadSocket = ""
Do
X = recv(NumSocket, ReadBuffer(1), 1024, 0)
If X > 0 Then
buffer = buffer + Left$(StrConv(ReadBuffer, vbUnicode), X)
End If

If X <> 1024 Then Exit Do
DoEvents
Loop
ReadSocket = buffer
End Function

:clown) BasicInstinct :clown)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009
21 mai 2003 à 19:23
slt,
ce ke tu peut faire, c kan tu recois les data (getdata), tu les place dans une variable et tu les renvoit au server. s le server recoit exactement les données qu'il vient d'envoyer, il envoit un truc spe style "data ok", sinon il envoit un autre truc spe style "data no" et renvoit aussitot les data complete.
apres 3 essais échoués par exemple, le erver arrete d'envoyer les données pour pas faire de bug. Voila, ou alors, le server fragmente les données, envoit un 1er message avec le nombre de paquets a envoyer, puis les envoit avec un numéro de séquence chaqun.
0
Rejoignez-nous