DraaFil
Messages postés264Date d'inscriptionmercredi 16 avril 2003StatutMembreDernière intervention23 mars 2012
-
5 janv. 2007 à 23:46
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 2019
-
16 janv. 2007 à 15:22
BOnjour a tous,
J'ai un probleme avec mon winsock, je vous explique.
Je transmet les coordonne de la souris aussitot que cette derniere bouge via un winsock. mon probleme est que sa me donne une change de coordonne longue qui fait plante mon programme. Y a-t-il moyen que mon application serveur traite un getdata a la fois et non les mettre toute dans le meme.
Voici la fonction que j'utilise :
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Winsock.GetData data, vbString
If Left(data, 8) = "Connecté" Then
Label1.Caption = "Connecté"
Else
Text4.Text = data
Text5.Text = separe(data, ":", True) 'droit
PicAutre.Left = separe(data, ":", False) 'gauche
PicAutre.Top = separe(data, ":", True) 'droit
End If
End Sub
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 6 janv. 2007 à 01:25
Salut
Ma boule de cristal a réussit à décrypter le "une change de coordonne longue" en "toutes les données à la suite et pas une par une".
En effet, Winsock est un composant qui utilise les capacités électroniques de ton PC : il doit s'adresser à la carte mère qui gère les données du réseau.
Or, les cartes mères ont beaucoup d'autre chose à traiter en même temps et elle dote tous ses équipement de buffer capables de mémoriser les données en attendant qu'elle ait le temps de venir les lire, notamment quand tu le lui demande avec un GetData.
Donc, après un GetData, tu peux récupérer en effet un buffer qui a accumulé tout ce que la carte réseau à emmagaziné depuis la dernière scrutation.
Par moyen d'isoler les données, il faut que tu le fasses toi même, par exemple en ajoutant un code de fin à chaque émission.
Lors de la réception, il te suffira de ne prendre que les données qui se trouvent devant ce code de fin afin de retrouver tes données.
Mais, il fadra aussi penser à traiter les données qui suivent, car elles ont été émises, donc il faut les traiter.
Tout ceci se fait en utilisant les fonctions de recherche dans les chaines et dans le découpage des chaines.
Genre : Instr, Left, Mid, Right, Split ...
Pour avoir des exemples, il te suffit d'analyser n'importe quelle source qui parle de Chat en réseau.
Les chats aussi sont confrontés à ce problème --> Il est forcément résolu dans chacune de ces sources (où alors, elle n'est pas une bonne source).
Personnellement, j'ai chaisi d'utiliser Chr(1) comme code de fin de "trame" et Chr(0) pour séparer chaque donnée à l'intérieur de cette trame. J'ai volontairement choisi des caractères que je ne risque pas de retrouver dans le contenu de mes messages, sinon, ça caffouillerait dur !
Bienvenu(e) dans le monde des Winsock !
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'accroit quand on la partage (Socrate)
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 16 janv. 2007 à 15:22
Plus simple : Tu crées une syncronisation
1 - Tu envois la position de la souris à l'instant T (toute autre tentative seront en exit sub)
2 - Le programme client recoi les données et envoi un accusé de reception
3 - Le programme serveur recoi l'accusé et peux dont renvoyé a nouveau la position de la souris