Précédent   Forum des professionnels en informatique > Autres langages > Général Visual Basic 6 et VBScript > VB 6 et antérieur
VB 6 et antérieur Visual basic 6 et versions antérieures. Avant de poster -> La FAQ VB6, Les tutoriels VB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 09/11/2008, 13h41   #1
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 17
Messages: 260
Par défaut Etude, théorie et pratique du controle winsock

Bonjour à tous

Alors voilà, je suis motivé pour apprendre à me servir de ce controle pour la simple et bonne raison que mes méthodes sont trop limités.

D'habitude, pour envoyer/recevoir des données, je fais ça à ma manière (Upload fichier text sur ftp, ou récupération de données sur une page web) et par conséquent, l'appli est sans cesse en actualisation pour télécharger les données, c'est du n'importe quoi.

Dans ce topic : http://www.developpez.net/forums/d62...nt-personnage/

j'ai réussi à mettre en mouvement des petits personnages, mais j'aimerai savoir comment faire pour que ca soit visible par tous les utilisateurs, autrement dit, on revient au MMORPG.
Comment sauvegardé les déplacements qu'a effectué telle personne avec le personnage par exemple, envoyer les données instantanément, afin que les utilisateurs qui seront à ce moment là "spectateurs" voient les déplacements.

Donc voilà, je pense que je laisserai ouvert ce topic un certains temps pour pouvoir bien experimenter la chose, je compte sur votre aide ;p

Merci d'avance !!

[edit] : Je suis en train d'étudier ce controle, donc si vous avez des conseils ou des precisions à m'apporter, je suis prenneur =D
__________________
Code :
Votre clavier comporte plus de 100 touches, pourquoi utiliser le langage SMS ?
Ramdoulou est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 14h12   #2
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 17
Messages: 260
Par défaut

[edit] Autant pour moi, petite erreur de synthèse...^^
__________________
Code :
Votre clavier comporte plus de 100 touches, pourquoi utiliser le langage SMS ?

Dernière modification par Ramdoulou ; 09/11/2008 à 14h32.
Ramdoulou est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 14h42   #3
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 43
Messages: 9 397
Envoyer un message via Skype™ à bbil
Par défaut

bonjour, Ramdoulou ..

tu as bien évidement commencé par lire les tutos :

Créer un client mail avec le contrôle Winsock

Série de tutoriels consacrée à la programmation réseau

bonne étude
__________________
page à bbil : dernières entrées : Débuter en VB6


Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI

Impératif "A LIRE AVANT DE POSTER"
bbil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 15h10   #4
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 17
Messages: 260
Par défaut

Je vais étudier tout ça, merci =)

J'ai déjà réussi à effectuer une connexion entre 2 pc (client / server), et à récupérer des données par exemple dans des textbox etc...

j'avance lentement, mais surement, merci pour ton aide =)
__________________
Code :
Votre clavier comporte plus de 100 touches, pourquoi utiliser le langage SMS ?
Ramdoulou est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 16h56   #5
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 17
Messages: 260
Par défaut

J'ai un petit probleme de synthèse dans le code suivant :

Code :
Private Sub tcpServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
   
   If Index = 0 Then
      intMax = intMax + 1
      Load tcpServer(intMax)
      tcpServer(intMax).LocalPort = 0
      tcpServer(intMax).Accept requestID
      Load txtData(intMax)
   End If
   
' Vérifie que le contrôle est fermé. Sinon, ferme
' la connexion en cours avant d'accepter la
' nouvelle.
If tcpServer.State <> sckClosed Then _
tcpServer.Close
' Accepte la demande avec le paramètre requestID.
tcpServer.Accept requestID
End Sub
On me dit concernant : "(Index As Integer, ByVal requestID As Long)"
que la déclaration de procédure ne correspond pas à la description de l'évenement ou de la procédure du même nom.

Jsuis persuadé que ca concerne"(Index as Integer)" mais pourquoi ? =o
__________________
Code :
Votre clavier comporte plus de 100 touches, pourquoi utiliser le langage SMS ?
Ramdoulou est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 17h02   #6
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 43
Messages: 9 397
Envoyer un message via Skype™ à bbil
Par défaut

syntaxe pas synthèse;..


C'est qu'ici tcpServer désigne un groupe de contrôle WinSock ..., met la propriété index à 0 de ton contrôle WinSock
__________________
page à bbil : dernières entrées : Débuter en VB6


Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI

Impératif "A LIRE AVANT DE POSTER"
bbil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 17h10   #7
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 17
Messages: 260
Par défaut

Oui syntaxe raaah ce mot a du mal à passer ^^

Merci =)

Mais maintenant ca me le fait avec
Code :
Private Sub tcpServer_DataArrival _
(ByVal bytesTotal As Long)
Cette partie est necessaire à présent ? Car peut etre qu'elle est en trop, je parle de :

Code :
Private Sub tcpServer_DataArrival _
(ByVal bytesTotal As Long)
' Déclare une variable pour les données reçues.
' Invoque la méthode GetData et paramètre pour
' ces données la propriété Text d'un contrôle
' TextBox nommé txtOutput.
Dim strData As String
tcpServer.GetData strData
txtOutput.Text = strData
End Sub
Non ?
__________________
Code :
Votre clavier comporte plus de 100 touches, pourquoi utiliser le langage SMS ?
Ramdoulou est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 17h22   #8
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 43
Messages: 9 397
Envoyer un message via Skype™ à bbil
Par défaut

ben la c'est Index qui te manque.. je ne sais pas à partir de quoi tu "étudie" mais cela semble être une gestion de multiple connexion un serveur, avec plusieurs clients.. et pour chaque clients un contrôle WinSock serveur , membre de ton groupe de contrôle..
__________________
page à bbil : dernières entrées : Débuter en VB6


Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI

Impératif "A LIRE AVANT DE POSTER"
bbil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 17h25   #9
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 17
Messages: 260
Par défaut

C'est bon c'est résolue, jsuis en train de resoudre d'autres ptits problemes =)
__________________
Code :
Votre clavier comporte plus de 100 touches, pourquoi utiliser le langage SMS ?

Dernière modification par Ramdoulou ; 09/11/2008 à 17h43.
Ramdoulou est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 17h57   #10
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 17
Messages: 260
Par défaut

Alors enfaite j'ai pas mal de problemes...
Niveau Syntaxe, jcomprend pas trop : "Load txtData(intMax)" et ça me pose un probleme "Procédure ou fonction non définie"

Et ensuite, jme suis aperçu que si je supprimais cette ligne, la connexion se faisait, mais sur ce meme pc (où il y a le server), quand je tappe un truc ca marche, si jme met sur un autre pc en meme temps, ca marche aussi, mais si je retourne sur celui la, je tappe un truc et ça efface tout =s

Donc vla, si quelqu'un peut me dire ce qui cloche dans mon code ça serait sympa =D

Code :
Private intMax As Long
 
 
Private Sub Form_Load()
   intMax = 0
   tcpServer(0).LocalPort = 1001
   tcpServer(0).Listen
 
 
' Donne à la propriété LocalPort une valeur
' entière. Puis invoque la méthode Listen.
'tcpServer.LocalPort = 1001
'tcpServer.Listen
' Affiche la feuille client.
'frmClient.Show
End Sub
 
Private Sub txtSendData_Change()
' Le contrôle TextBox nommé txtSendData contient
' les données à envoyer. Chaque fois que l'utilisateur entre du
' texte dans le contrôle textbox, la chaîne est envoyée en
' utilisant la méthode SendData.
tcpServer(intMax).SendData txtSendData.Text
End Sub
 
Private Sub tcpServer_DataArrival _
(Index As Integer, ByVal bytesTotal As Long)
' Déclare une variable pour les données reçues.
' Invoque la méthode GetData et paramètre pour
' ces données la propriété Text d'un contrôle
' TextBox nommé txtOutput.
Dim strData As String
tcpServer(intMax).GetData strData
txtOutput.Text = strData
End Sub
 
Private Sub tcpServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
   
   If Index = 0 Then
      intMax = intMax + 1
      Load tcpServer(intMax)
      tcpServer(intMax).LocalPort = 0
      tcpServer(intMax).Accept requestID
      'Load txtData(intMax)
 
   End If
   
' Vérifie que le contrôle est fermé. Sinon, ferme
' la connexion en cours avant d'accepter la
' nouvelle.
'If tcpServer.State <> sckClosed Then _
'tcpServer.Close
' Accepte la demande avec le paramètre requestID.
'tcpServer.Accept requestID
End Sub
 
 
 
__________________
Code :
Votre clavier comporte plus de 100 touches, pourquoi utiliser le langage SMS ?
Ramdoulou est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 20h40   #11
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 17
Messages: 260
Par défaut

Apres avoir effectué quelques tests, jme rend bien compte que ya un ptit soucis dans mon code précédent, car au final c'est toujours un tchat à 2...si ya plus, ben au lieu d'afficher ce que j'ecris, ca efface tout carrement =s

Mais vraiment jcomprend pas ce que signifie : "Load txtData(intMax)"
Ca charge quoi ? J'ai essayé de remplacer txtdata par txtsenddata (le nom du textbox du server dans lequel on tappe le texte, mais ca marche pas...
__________________
Code :
Votre clavier comporte plus de 100 touches, pourquoi utiliser le langage SMS ?
Ramdoulou est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 21h59   #12
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 43
Messages: 9 397
Envoyer un message via Skype™ à bbil
Par défaut

on ne voit pas tout ton code, mais j'ai l'impression que tu gère mal ton index :


dans la procédure évènementielle :
Code :
Private Sub tcpServer_DataArrival _
(Index As Integer, ByVal bytesTotal As Long)
tu reçoit un message du client dont le numéro est stocké dans la variable index

et avec
Code :
tcpServer(intMax).GetData strData
tu récupère les données écrite par le dernier client connecté, c'est pas forcément le même. ..
__________________
page à bbil : dernières entrées : Débuter en VB6


Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI

Impératif "A LIRE AVANT DE POSTER"
bbil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 22h08   #13
Rédacteur/Modérateur
 
Avatar de Delbeke
 
Date d'inscription: juillet 2006
Localisation: TOURCOING (59200)
Âge: 56
Messages: 2 578
Envoyer un message via MSN à Delbeke
Par défaut

Load txtBox(NumeroTextBox) permet de charger à la volée un nouveau controle du meme type que txtBox, ce nouveau controle héritera de tous les propriétés et les metodes du txtBox que tu as placé sur ta feuille.
Il faut donc au départ, placer un txtBox sur ta feuille et, pour pouvoir en avoir plusieurs, lui donner 0 dans la propriété index.
A partir de la là, il est possibe de faire un clone du txtBox a l'aide de la méthode Load . Il faudra aussi donner à la methode load, un numéro d'index qui n'aura pas encore été utilisé.
Exemple:
Load txtBox(1) créera un nouveau txtBox dont la propriété index sera 1
Si le numéro est dèjà utilisé > boom
pour acceder aux propriétés individuelles de ce txtBox, on fera txtBox(1).propriété = valeur
Dans ton code tu verra que les procédure événement du txtBox de départ ont un paramètre de plus : Index As Integer. Qunad l'évement se declenche, il suffit de vérifier cet Index pour savoir quel clone à déclenché l'evénement.
__________________
En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
(ALEXANDRE DUMAS)

N'hésitez pas à visiter ma page de contributions
Delbeke est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 22h19   #14
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 17
Messages: 260
Par défaut

Merci beaucoup pour cette explication !

Donc txtData doit correspondre logiquement à quel textbox ? Celui où l'on peut ecrire dedans pour que tous les utilisateurs ayant le client de lancé voient ce qu'il y a d'ecrit ? Ou pour le textbox d'affichage de ce qu'il y a d'ecrit ?

Et autre chose, pourquoi "cloner" un textbox sans l'autre, et pourquoi cloner tout simplement ? Pour faire en sorte que plusieurs connexions soient faisables, il devrait y avoir que le Winsock à cloner non ?

Suis-je à côté de la plaque, ou sur la bonne voie ?

Merci d'avance

Bbil : Comment je dois faire alors pour que ca soit le même oO car j'ai beau essayer de créer des variables ayant differentes fonctions, j'obtiens pas de resultat =/
__________________
Code :
Votre clavier comporte plus de 100 touches, pourquoi utiliser le langage SMS ?
Ramdoulou est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 22h36   #15
Rédacteur/Modérateur
 
Avatar de Delbeke
 
Date d'inscription: juillet 2006
Localisation: TOURCOING (59200)
Âge: 56
Messages: 2 578
Envoyer un message via MSN à Delbeke
Par défaut

Citation:
Donc txtData doit correspondre logiquement à quel textbox ?
Ben au txtData qui se trouve sur ta feuille et dont l'index est zéro. Nous sommes des informaticiens, on ne fait pas dans la divination.

Code :
Et autre chose, pourquoi "cloner" un textbox
Apparement tu travailles sur un serveur qui doit recevoir plusieurs connections simultanées. Si tu sais combien au départ, pas de problème, tu pose autant de controles que tu as de connection sur ta feuille et le tour est joué. Mais si tu sais pas ? tu fais comment ? simple , tu charges les composants supplémentaires au fur et à mesure de la montée en charge. Et tu peux egalement utiliser unload pour decharger les composants dont tu n'as plus besoin.
__________________
En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
(ALEXANDRE DUMAS)

N'hésitez pas à visiter ma page de contributions
Delbeke est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/11/2008, 22h40   #16
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 43
Messages: 9 397
Envoyer un message via Skype™ à bbil
Par défaut

Citation:
Envoyé par Ramdoulou Voir le message
....
Bbil : Comment je dois faire alors pour que ca soit le même oO car j'ai beau essayer de créer des variables ayant differentes fonctions, j'obtiens pas de resultat =/
l'évènement DataArrival , te renvoi dans index, le numéro de contrôle qui à reçu le message, utilise cet index pour récupérer ce message avec getData
__________________
page à bbil : dernières entrées : Débuter en VB6


Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI

Impératif "A LIRE AVANT DE POSTER"
bbil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/11/2008, 13h11   #17
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 17
Messages: 260
Par défaut

Donc alors, je récapitule.

Voici ma feuille :


Text1 (nommé txtSendData) est le textbox dont les données inscrites dedans vont être récupérées puis affichées dans le client (une application appart) sous un textbox (le client contient les mêmes textbox, donc il est aussi possibles d'ecrire avec le client).

Text2 (nommé txtOutput) est le textbox qui affiche les données qui ont été récupérées sous Text1 peu importe sa provenance, du server ou d'un client.

L'index est paramétré sur vide pour ces 2 texts.

Le controle Winsock a l'index réglé sur 0.

Donc si j'ai bien compris, je dois régler l'index de Text1 et Text2 sur 0 et remplacé ensuite la ligne
Code :
Load txtData(intMax)
par
Code :
Load txtSendData(intMax)
?

Ensuite, concernant ton dernier message bbil, je dois créer une variable qui stockera la valeur de l'index de DataArrival ?

Excusez moi si je suis à côté de la plaque, mais j'essaye vraiment de comprendre avec mes moyens, et jsuis pas exellent, et sur ce coup, jtrouve que c'est un controle pas fastoche à manipuler mais il n'est pas question que je laisse tomber =)
__________________
Code :
Votre clavier comporte plus de 100 touches, pourquoi utiliser le langage SMS ?
Ramdoulou est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/11/2008, 13h17   #18
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 43
Messages: 9 397
Envoyer un message via Skype™ à bbil
Par défaut

non mon dernier message était juste une interrogation sur la procédure tcpServer_DataArrival, dans ton code, procédure qui à index comme paramètre, mais dans la suite du code (dans cette procédure) tu n'utilise pas comme il serai logique index, mais intmax:
Code :
tcpServer(intMax).GetData strDatatcpServer(intMax).GetData strData
, remplace intMax par index ...
__________________
page à bbil : dernières entrées : Débuter en VB6


Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI

Impératif "A LIRE AVANT DE POSTER"
bbil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/11/2008, 13h30   #19
Modérateur
 
Avatar de OhMonBato
 
Date d'inscription: mars 2007
Localisation: Vannes et en mer
Messages: 2 243
Par défaut

Si je peux me permettre quelques remarques :

Tu as un controle tcpServer(0). Celui ci ne sert qu'a recevoir les demandes de connexions. Des que tu recois une demande de connexion, tu crees un nouveau tcpServer, d'indice "nombre de tcpServer deja existants + 1" qui sera dedie a communiquer avec le client en question.

Tu as egalement 2 textbox, si j'ai bien compris le controle TxtData sert a taper les donnees que tu veux envoyer vers les clients. Sauf erreur de ma part, tu n'as pas precise si tu voulais envoyer les memes donnees a tous les clients ou des donnees independantes en fonction des clients, dans le deuxieme cas, il faudrait creer un nouveau TxtData d'indice "nombre de tcpServer deja existants + 1" egalement. Au passage j'aurais d'ailleurs appele ce controle TxtOut puisque ce sont des donnees qui sortent pour le serveur et je ne mettrais pas l'envoi des donnes dans l'evenement change car a chaque ajout de caractere tu renvois toute la chaine presente.

Meme doute pour moi en ce qui concerne l'affichage des donnees recues des clients, tu veux tout afficher dans une seule textbox ou dans une textbox par client ? Pour le nom, je mettrais TxtIn (donnees entrantes vues du serveur) et il faudrait creer des TxtIn indexes la aussi si tu veux un affichage de donnees par client.

Petite "astuce", en mode creation, met le nom de tes textbox comme proprietes Text de ces memes TextBox (TxtIn(0)" par exemple, ca permet simplement en regardant la feuille de savoir comment s'appelle tes controles
__________________
Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
OhMonBato est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/11/2008, 13h32   #20
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 17
Messages: 260
Par défaut

Ah oui j'avais même pas fait attention, merci bien ca marche !

Et concernant
Code :
Load txtData(intMax)
je l'ai supprimé et ça ne change rien, j'ai remplacé par txtSendData, mais ya une erreur comme quoi je n'ai pas declaré la procédure...donc comment je dois m'en servir à ce moment là ? =o
__________________
Code :
Votre clavier comporte plus de 100 touches, pourquoi utiliser le langage SMS ?
Ramdoulou est déconnecté   Envoyer un message privé Réponse avec citation
NEWS VISUAL BASIC 6FAQs VBTUTORIELS VBOUTILS VBSOURCES VBLIVRES VBWIKI

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Autres langages > Général Visual Basic 6 et VBScript > VB 6 et antérieur



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 07h36.


Vos questions techniques : forum d'entraide Visual Basic 6 - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.