Totooo62
Messages postés17Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention24 juin 2008
-
23 juin 2008 à 11:34
Totooo62
Messages postés17Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention24 juin 2008
-
23 juin 2008 à 14:35
Bonjour tous, j'ai un probléme, j'envoi des informations via un Winsock, d'un serveur vers plusieur client,
l'envoi se fait grace a quelque ligne du genre
Wck.Senddata txtmessage.text
Wck.Senddata "M" & variable1
Wck.Senddata "1" & variable2
Wck.Senddata "2" & variable3
...
Wck.Senddata "X" & variable X
sur le client, a l'événement Winsock_datarrival j'ai un Ordre qui permet de récupéré le caractère placé en début de phrase
pour ensuite faire un Select Case de l'ordre
du genre
Select Case Ordre
Case "M"
message = data
Case "1"
Case"X"
...
et un msg box aprés le End Case qui m'affiche seulement le txtmessage.text, le probléme, c'est que ca m'affiche tout a la suite
le message donne "txtmessage.text & variable1 & variable2 & variable ...
comment faire pour affiche que le txtmessage.text et avoir des variable qui recoivent les data arrivé grace au identifiant 1, 2 , 3 ... ?
j'ai tenté de mettre des Null en fin de chaque paquet a envoyé, ou des vbCrLf... comment géré ca a l'arrivé sur le client ? merci du coup de main ...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 23 juin 2008 à 12:29
Salut
Oui, c'est normal.
Au moment où tu lis le buffer, celui-ci te fournit tout ce qu'il a reçu, tout l'un derrière l'autre.C'est à toi de gérer la séparation des messages, par exemple en ajoutant un caractère spécial, par exemple Chr$(0), en fin de chaque message caractère de fin de message CFM
Le principal est que ce CFM ne puisse pas être confondu avec les données que tu envoies.
A la réception, il faudra d'abord séparer chaque message avec un Split utilisant le CFM.
Tu auras alors un tableau de chaine correspond à chaque message.
Autre phénomène que tu rencontreras peut-être : A la lecture, un message peut ne pas être complet, c'est à dire que tu vas lire le buffer à un moment où le message n'est pas arrivé en totalité.
Cela peut arriver si le message est très long et dépasse la taille du buffer d'envoi.
Il faut donc, à la réception, vérifier qu'il existe au moins un CFM avant de vouloir le traiter (avec Instr).
Si le CFM n'est pas là, il faudra mémoriser le texte reçu et attendre le prochain DataArrival + ajouter les nouveaux caractères reçus à celui que tu auras mémorisé avant.
Charge quelques programmes qui parlent de Chat sous Winsock : Il y en aura surement un qui utilise cette technique.
Vala
Jack, =fr MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 23 juin 2008 à 13:26
salut,
et un petit break aussi....,
Wck.Senddata txtmessage.text : doevents
Wck.Senddata "M" & variable1 : doevents
Wck.Senddata "1" & variable2 : doevents
Wck.Senddata "2" & variable3 : doevents
...
Wck.Senddata "X" & variable X : doevents
le mieux étant de te faire une procédure d'envoi, ce qui te permet également de tester l'état de connexion pour éviter toute erreur....
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Totooo62
Messages postés17Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention24 juin 2008 23 juin 2008 à 13:30
Merci pour les réponses, j'ai bien compris la théorie du CFM, je n'ai jamais utilisé le Instr, j'vais regardé un peu, pour le DoEvents je sais pas du tout a quoi sa correspond :s (j'suis peu etre encore un peu noob aprés 1 ans d'informatique lol)
si quelqu'un aurai la patience d'expliqué en gros ce que ca donne, merci encore a vous deux.
Totooo62
Messages postés17Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention24 juin 2008 23 juin 2008 à 14:13
Résultat des course, le message arrive du genre
message%variable1%variable2%variable3%...
suffit effectivement de faire
Wck_DataArrival(...)
Dim data as String
Dim tab() as String
Wck.Getdata data
tab = Split(data, "%")
end sub
comment faire pour limité un for i allant de 1 to : le nombre d'enregistrement du tableau ?
sachant que je ne connais pas a l'avance le nombre de variable envoyé
For i : = 1 to Len(tab()) ? il doit existé quelque chose du genre ... j'doit etre vraiment nul :)