Question sur le getdata via le winsock

DraaFil Messages postés 264 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 23 mars 2012 - 5 janv. 2007 à 23:46
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 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

Merci
DraaFil

2 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
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)
0
cs_EBArtSoft Messages postés 4525 Date d'inscription dimanche 29 septembre 2002 Statut Modérateur Dernière intervention 22 avril 2019 9
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

@+

E.B.
0
Rejoignez-nous