Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > 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

Réponse
 
Outils de la discussion
Vieux 09/11/2008, 13h41   #1 (permalink)
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 16
Messages: 224
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 (permalink)
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 16
Messages: 224
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 (permalink)
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 42
Messages: 7 742
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
__________________
bbil : 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 (permalink)
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 16
Messages: 224
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 (permalink)
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 16
Messages: 224
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 (permalink)
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 42
Messages: 7 742
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
__________________
bbil : 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 (permalink)
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 16
Messages: 224
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 (permalink)
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 42
Messages: 7 742
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..
__________________
bbil : 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 (permalink)
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 16
Messages: 224
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 (permalink)
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 16
Messages: 224
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 (permalink)
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 16
Messages: 224
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 (permalink)
Responsable Visual Basic
 
Avatar de bbil
 
Date d'inscription: juin 2003
Localisation: Toulouse-Mirepoix
Âge: 42
Messages: 7 742
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. ..
__________________
bbil : 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 (permalink)
Rédacteur/Modérateur
 
Avatar de Delbeke
 
Date d'inscription: juillet 2006
Localisation: FENAIN (59179)
Âge: 55
Messages: 2 162
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 (permalink)
Membre Confirmé
 
Avatar de Ramdoulou
 
Date d'inscription: novembre 2006
Localisation: France
Âge: 16
Messages: 224
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 (permalink)
Rédacteur/Modérateur
 
Avatar de Delbeke
 
Date d'inscription: juillet 2006
Localisation: FENAIN (59179)
Âge: 55
Messages: 2 162
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
NEWS VISUAL BASICFAQs VBTUTORIELS VBOUTILS VBSOURCES VBLIVRES VB

Réponse

Précédent   Forum des développeurs > 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
Navigation rapide