Winsock

hhhp2004 Messages postés 173 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 13 octobre 2007 - 17 janv. 2006 à 00:08
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 - 18 janv. 2006 à 00:25
hhhp2004

salut,

je veux trouver une alternative a

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)


Dim partieDonnees As String
Dim Donnees As String


Winsock1.GetData partieDonnees


Donnees = Donnees & partieDonnees


End Sub

jai pense a

Do

DoEvents
If Winsock1.State <> sckConnected Then Exit Do
Winsock1.GetData partieDonnees
Donnees = Donnees & partieDonnees

Loop

mais si Winsock1 recoit des donnees trop vite, la boucle do ne semble pas recuperer tout ce qui est envoye....

quelqun pourrait me dire svp comment optimiser la boucle do ou une methode qui recupere toutes les donnes envoyes a winsock1 sans utiliser Winsock1_DataArrival ?

merci

4 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 janv. 2006 à 01:31
salut,


si le State est <> sckConnected alors de toute manière, rien de déclanche l'évènement arrival.





tu dois finir tes message par un séparateur personnel (disons
"###SEPAR_FIN###" en constante sSepar) et ajouter mais avec une
static, sinon à la sortie du Sub, Donnee est réinitialiée



Option Explicit

Const sSepar As String = "###SEPAR_FIN###"

'

'

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim partieDonnees As String

Static Donnees As String



Winsock1.GetData partieDonnees



Donnees = Donnees & partieDonnees

If Right$(Donnees, Len (sSepar)) <> sSepar Then

Exit Sub

Else

partieDonnees = Donnees

Donnees = ""

End If



' et la suite de ton code ici, en travaillant sur "partieDonnees"

End Sub





<small> Coloration
syntaxique automatique [AFCK]</small>




et ne pas oublier d'envoyer le separateur, cotés client et serveur, à chaque SendData




++

PCPT [AFCK]
0
hhhp2004 Messages postés 173 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 13 octobre 2007
17 janv. 2006 à 02:34
hhhp2004

salut et merci davoir repondu pcpt,

je crois que je nai pas explique assez clair mon probleme, donc maintenant je vais donner des details,

jai une fonction (renvoie le code html du site) qui envoie une requete http a un site et attend sa reponse (qui est le code html du site), et je ne peux pas inclure dans cette fonction levenement dataarrival .... dou la boucle qui repete toujours (jusque ce que le site ferme la connexion) winsock1.getdata (la boucle repete toujours getdata ... meme si il ny a rien qui arrive) ... je ne peux pas utiliser levenement dataarrival puisque je veux faire une fonction (la fonction doit tout faire par elle meme, recuperer les donnes qui arrivent a winsock1)

si je ne suis pas clair ... fais le moi savoir

merci
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 janv. 2006 à 03:43
éventuellement en liant le contrôle à une classe pour qu'elle gère
tout, sinon, si je comprend (ce qui est loin d'être sûr avec ton
explication), alors tu ne peux pas.

t'as beau faire une boucle dans une procédure, tu dis qu'elle n'est pas appelée donc çà ne change rien...



essaie de jeter un oeil sur les sources parlant du téléchargement de sources-http par winsock



@+
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
18 janv. 2006 à 00:25
hhhp2004, tu redimensionnes la variable "donnees" dans l' évènement data_arrival(). Sa portée est donc limitée à cette procédure.

Il faut donc simplement la déclarer en tant que variable globale dans
un en-tête de formulaire ou module standard, afin de conserver son
contenu entre les évènements data_arrival.
0
Rejoignez-nous