'déconcatenation' [Résolu]

Signaler
Messages postés
17
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
24 juin 2008
-
Messages postés
17
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
24 juin 2008
-
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 ...
A voir également:

7 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
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)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
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
Messages postés
17
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
24 juin 2008

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.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
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]
Messages postés
17
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
24 juin 2008

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
for i = 0 to ubound(tab())

NB : TAB est un mot réservé, nomme ton tableau différemment çà t'évitera des surprises
++
Messages postés
17
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
24 juin 2008

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