Asaiel
Messages postés37Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention21 septembre 2006
-
12 août 2005 à 15:12
Asaiel
Messages postés37Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention21 septembre 2006
-
13 août 2005 à 01:15
Bonjour
J'ai posté un message un peu + bas a propos d'une liste de fichiers distant dans une listbox via winsock.
Apparemment cela pourrait venir du fait que la taille max par envoi est fixée a 4096 Octets.
Pour consultez le bout de code, ouvrez mon message precedent...
Quelqu'un pourrait il m indiquer les corrections a apporter a mon code?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 12 août 2005 à 17:45
la limite est avant, oui, le paquet peut tant être de 4Ko que de bcp moins. tu peux voir la taille (rarement fixe) de chaque paquet envoyé dans le Wsk_SendProgress...
avec le séparateur, si ta boucle envoie 3messages :
...send "<DIR>A"
...send "<FILE>B"
...send "<DIR>K"
...send SEPARATOR
le serveur (enfin, client pour ton exemple) va recevoir chaque valeur d'un bloc, jusqu'au séparateur
par contre, dans ta boucle, il ne faut pas oublier un "DoEvents" après chaque envoie.
et si tu veux que le serveur ne reçoive pas les 3 messages concaténé, alors met le separateur où tu en as besoin :
...send : "<DIR>A" & SEPARATOR: DoEvents
...send : "<FILE>B" & SEPARATOR: DoEvents
...send : "<DIR>K" & SEPARATOR: DoEvents
mais tant le client que le serveur, vont souffrir de ce travail...
(je sais pas si je suis clair. la solution du séparateur est la bonne, certifiée!!)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 12 août 2005 à 16:08
salut,
je viens de lire ton autre post.
tu es sur la bonne voie avec la limite.
en fait, Winsock n'est pas réellement limité en longueur, j'avais fais pas mal de tests, tes 4Ko sont aléatoires.
en fait, à la fin de tes boucles (en envoie), envoie un dernier message qui cloturera la totalité du message.
donc par exemple,
sur le client et serveur, déclaration :
Const SEPARATOR as String = "<FIN_DU_MESSAGE>"
tu envoies :
WSKc.SendData ToutesMesDonneesEnPlusieursFois 'donc bien plus de 4Ko
et quand tout est fini, donc à la fin de ta boucle
WSKc.SendData SEPARATOR
et ton serveur, lui, il attend le message complet pour le gérer. c'est à dire que tant qu'il n'a pas la fin du message, il stock...
donc au Data Arrival :
Static Buffer as String
Dim Data as String
WSKs.GetData Data
Buffer = Buffer & Data
'donc à chaque envoie, donc pendant la boucle client, ton serveur cumule les réceptions (incomplètes)
'et là seulement, tu tests. si le Buffer n'est pas complet, tu quittes, donc il va continuer à cumuler. mais il ne faut surtout pas oublier de vider le tampon si la Data est complète
If RightB(Buffer,LenB(SEPARATOR)) <> SEPARATOR Then Exit Sub
'et arrivé ici, c'est que ton message est complet. tu n'as plus qu'à enlever le séparateur
Data = LeftB(Buffer,LenB(Buffer) - LenB(SEPARATOR))
'tu vides le tampon
Buffer = ""
et ta Data est complète, t'as plus qu'à faire ce que tu veux....
n'oublies pas non plus qu'une variable String est limitée. pour l'atteindre, t'as le temps, mais bon, faut y penser.
Asaiel
Messages postés37Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention21 septembre 2006 12 août 2005 à 17:33
Re...:D
Alors j'ai testé ta méthode, mais malheureusement ca ne marche pas chez moi, car en regardant le deboguage, je me suis rendu compte qu'il envoyait tout en un seul paquet, et que quand la chaine et trop longue, le SEPARATOR est envoyé mais pas recu, ce qui fait que le traitement ne commence jamais.
J'ai pu verifier cela en tapant ?data dans la fenetre de debogage apres avoir lancé l'application et posé un point d'arret a la ligne du test SEPARATOR.
La chaine est coupée bien avant le SEPARATOR, je commence donc serieusement a penser à une limite de taile....
Asaiel
Messages postés37Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention21 septembre 2006 12 août 2005 à 18:10
Oki je n'avais pas mis les doevents (dans les boucles si j'ai bien compris, apres chaque envoi...), je vais donc essayer de les rajouter, et je te re-re-tiens au courant...
En tout cas merci merci merci de prendre du temps pr resoudre les pbm (pr moi ou pr les autres...:D)