Séparrer les paquets

Résolu
cs_clinik Messages postés 34 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 1 novembre 2012 - 12 août 2006 à 00:12
cs_clinik Messages postés 34 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 1 novembre 2012 - 12 août 2006 à 17:56
Salut,
Je suis en train de me faire un client qui se connecte sur un serveur XML socket,

De temps à autres le serveur envois des plusieurs paquet dans le même et je voudrais les séparrer et ensuite les afficher dans une listbox, exemple de données reçu

<C "VISITEUR1" Info "10289" />
Ou plusieurs paquet collé:
<M "VISITEUR1" Texte"Ceci est un exemple" />.<C "Quelqu'un" Info"1129" />

J'attend une réponse, merci!

2 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 77
12 août 2006 à 17:37
Salut
Question bête : as-tu reflechi au problème ?
Plusieurs paquets collés : La question qui vient tout de suite à l'idée, c'est "Qu'est ce qui sépare les paquets les uns des autres ?"
Rien qu'en voyant ton exemple, on dirait que ce sont les < et /> (ce qui est troublant, c'est le point entre les > et /< ...)
Le plus efficace, c'est de transformer ta chaine en tableau dont le séparateur sera le < de chaque début de trame.

Dim monTableau() As String
monTableau = Split(maChaineRecue, "<")

Tu auras ainsi la 1ere trame dans monTableau(0),
la suivante dans monTableau(1) ...
jusqu'à monTableau(UBound(monTableau))

Pour insérer ces données dans ta liste, il suffit de faire une boucle :
For r = 0 To UBound(monTableau)
   maList.AddItem monTableau(r)
Next r
Et cela fonctionne aussi bien lorsqu'il n'y a qu'une trame à la fois

Comme la quantité de donnée dans le buffer de ton winsock dépend de la vitesse d'arrivée des données mais aussi de la charge de ta machine, tu peux, comme tu l'as vu, recevoir plusieurs trames en même temps, mais aussi recevoir des trames incomplètes.
Pour valider une trame, il te faut donc impérativement tester s'il existe un /> final.
Si ce n'est pas le cas, il faut garder ce début de trame jusqu'à la prochaine réception, puis lui ajouter ce que tu recevras plus tard..

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
3
cs_clinik Messages postés 34 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 1 novembre 2012
12 août 2006 à 17:56
Vala! Merci! Sa fonctionne #1 ;)
0