'déconcatenation'

Résolu
Totooo62 Messages postés 17 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 24 juin 2008 - 23 juin 2008 à 11:34
Totooo62 Messages postés 17 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 24 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 ...

7 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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
3
Totooo62 Messages postés 17 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 24 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.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 juin 2008 à 13:54
un peu plus d'infos ici :

Q : [doc/faq.aspx#vb_doevents Code : Mon application freeze lors d'une
longue opération, comment y rémedier]
0

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

Posez votre question
Totooo62 Messages postés 17 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 24 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 :)

merci pour le lien :)
Tous sur MAC OS X Leopard
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 juin 2008 à 14:23
for i = 0 to ubound(tab())

NB : TAB est un mot réservé, nomme ton tableau différemment çà t'évitera des surprises
++
0
Totooo62 Messages postés 17 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 24 juin 2008
23 juin 2008 à 14:35
c'était pour l'exemple :) meme si j'avais pas capté sur l'instant j'utilise pas ca comme nom ;) merci bien m'sieur l'admin!

Tous sur MAC OS X Leopard
0
Rejoignez-nous