VbBigBrotherdV
-
27 juil. 2001 à 02:52
djtomek959
Messages postés5Date d'inscriptionvendredi 31 décembre 2004StatutMembreDernière intervention11 février 2008
-
17 juin 2005 à 18:20
Bon voilà un petit cours indispensable pour prendre des bonnes bases avec winsock ... C'est dommage qu'on ait pas d'aide sur ce composant dans le fichier d'aide de VB ...
I - Mise en oeuvre d'une application Client / Serveur
Etablissement d'une connexion Client/Serveur :
- Le serveur est à l'écoute
- Le client demande l'ouverture de la connexion
- Le serveur accepte (ou non) la connexion
- Si la connexion est acceptée, elle est alors ouverte
- Les deux applications peuvent alors communiquer
Le protocole mis en œuvre par ce contrôle est soit UDP soit TCP. Les exemples donnés et les explications concernent principalement TCP, cependant les différences dans l'utilisation de ces deux protocoles sont minimes.
II - Les propriétés pour configurer le contrôle Winsock
A] Application Serveur
Pour configurer le contrôle Winsock de l'application serveur, la propriété suivante est utilisée :
- LocalPort : définit le port de communication à utiliser, ce nombre est choisi arbitrairement, en évitant les numéros de ports déjà utilisés (80, 21…)
La configuration de l'application serveur est terminée. Il faut cependant s'assurer que la machine qui va servir à exécuter cette application ait une adresse IP.
B] Application Client
Deux propriétés sont à définir pour configurer l'application client :
- RemoteHost : cette propriété doit contenir l'adresse IP de l'ordinateur sur lequel l'application serveur est exécutée
- RemotePort : le port de communication qui va être utilisé doit être défini ici, il doit être identique à celui utilisé par le serveur.
C] Propriétés communes
Une propriété doit être configurée identiquement pour les deux applications :
- Protocol : Permet de choisir le protocole (TCP ou UDP). Il faut en effet que les deux contrôles winsock communiquant ensemble "parlent" le même protocole, c'est à dire le même langage !
D] Remarques importantes
- Visual Basic nous dit que le port de communication peut être choisi automatiquement par le système en donnant comme valeur 0 pour les propriétés LocalPort et RemotePort. L'utilisation de cette possibilité reste cependant risquée et le fonctionnement aléatoire. Il est recommandé de donner un numéro de port bien défini. Il en existe suffisamment pour ne pas interférer avec le bon fonctionnement du reste du système
- Toutes les valeurs de ces propriétés peuvent être données lors de l'exécution du programme en les affectant simplement comme n'importe quelle variable, soit en utilisant la méthode BIND.
III - Les contrôles utilisés dans le fonctionnement
Le principal contrôle utilisé pour gérer le fonctionnement de Winsock est le contrôle STATE. Il permet de connaître à chaque instant l'état de la connexion (en attente, ouverte, fermée, en cours de fermeture, en cours d'ouverture…)
Exemple :
Soit un contrôle Winsock appelé WSCK. On récupèrera l'état de la connexion grâce à la ligne de code suivante :
Etat = WSCK.state
Une constante d'état sera alors affectée à la variable état.
La propriété State peut prendre les valeurs suivantes :
Constante Valeur Description
sckClosed 0 Fermé (valeur par défaut)
sckOpen 1 Ouvert
sckListening 2 À l'écoute
sckConnectionPending 3 Connexion en attente
sckResolvingHost 4 Hôte en cours de résolution
sckHostResolved 5 Hôte résolu
sckConnecting 6 En cours de connexion
sckConnected 7 Connecté
sckClosing 8 Connexion en cours de fermeture par l'homologue
sckError 9 Erreur
IV - Les méthodes les plus utiles
Les méthodes les plus utiles pour établir, gérer et utiliser une connexion sont :
- LISTEN : méthode utilisée dans une application serveur.
Le serveur devient alors à l'écoute d'une demande de connexion qui pourra venir ultérieurement.
- ACCEPT : par cette méthode, le serveur indique au client que sa demande de connexion est acceptée.
- CLOSE : méthode permettant au client ou au serveur de fermer la connexion.
- GETDATA : utilisée pour récupérer les données qui ont été reçues. Cette méthode peut être utilisée par le client ou par le serveur. Une méthode similaire est PeekData, le buffer de réception n'est alors pas vidé.
- SENDDATA : Cette méthode est utilisée pour envoyer des données, du client vers le serveur ou du serveur vers le client.
V - Les événements les plus utiles
Pour gérer une connexion, on doit utiliser des événements. Parmi ceux proposés, les suivants sont très utiles :
- ConnectionRequest : cet événement est déclenché sur le serveur lors d'une demande de connexion émise par le client. C'est dans le code associé à cet événement que l'on traitera l'acceptation ou le refus de la connexion.
- DataArrival : l'arrivée de données déclenche cet événement. Il faudra donc associer à celui-ci la méthode GetData ou PeekData.
- Error : Evénement déclenché par une erreur dans la connexion.
Toutes les fonctionnalités du contrôle Winsock n'ont bien sur pas été évoquées. Les informations données suffisent tout de même pour démarrer rapidement et sûrement l'exploration et l'exploitation de cet outil.
Contrôle appelé WSCK_client
WSCK_client.remotehost = 10.10.1.2 (adresse IP du serveur)
WSCK_client.remoteport = 1234
WSCK_client.protocol = 0
Etablissement de la connexion
Le serveur doit être en mode écoute :
à WSCK_serveur.listen
On peut vérifier que WSCK_serveur = 2
Le client demande l'établissement d'une connexion :
à WSCK_client.connect
Un événement ConnectionRequest est déclenché sur le serveur, on le traite à l'aide du code suivant :
Private Sub WSCK_serveur_ConnectionRequest (requestID As Long)
' Test de la présence d'une connexion déjà ouverte
' si oui, on la ferme
If WSCK_serveur.State <> sckClosed Then WSCK_serveur.Close
' Acceptation de la connexion
WSCK_serveur.Accept requestID
End Sub
La communication est alors établie, des données peuvent être échangées.
Pour envoyer des données
Client à Serveur :
ma_donnee = "Bonjour"
WSCK_client.SendData (ma_donnee)
Serveur à Client :
ma_donnee = "Au revoir"
WSCK_serveur.SendData (ma_donnee)
Pour récupérer les données :
Le Serveur récupère des données envoyées par le client.
L'événement DataArrival est déclenché
Private Sub WSCK_serveur_DataArrival (ByVal bytesTotal As Long)
Dim strData As String
' Appel de la méthode GetData
' Une chaîne de caractères (vbString) va être placée dans la variable strData
WSCK_serveur.GetData strData, vbString
End Sub
Le client recevra des données selon la même méthode.
PRECAUTIONS :
Cet exemple permet de mettre en place une architecture client/serveur de base. Il est destiné à montrer une connexion entre deux postes.
Une application de type client/serveur doit pouvoir, entre autre, définir et gérer un certain nombre de connexions simultanées, doit gérer une file d'attente de demandes de connexions…Toutes ces spécificités doivent être gérées au niveau du serveur mais n'entrent pas en ligne de compte pour ce qui est de la mise en place d'une application "pour apprendre".
Bon j'espére que ça vous aura servi à comprendre les connexions et les protocoles ...
T`inquiette NIX j`ai prevu une source pour la rentree qui va mettre en practique toute les fonctions ... se connecter , et communiquer entres ordis sous la forme d`un programme assez special ... Je vous en ferais la surprise ... T`inquiette pas , ce sera juste une demo de programme de Sub7 ... mais sans les fonction d`effacement ou de modification du disque dur des autres ... donc t`auras pas de problemes avec l`utilisation du programme ... Sinon , je vais aussi me creer un site ou je pourrais mettre mescodes source "Interdits" ...
Bon , je suis en Roumanie, je prends des cours aupres de pros ... Je reviendrais en force a la rentree ...
misterzinzin
Messages postés112Date d'inscriptionvendredi 27 octobre 2000StatutMembreDernière intervention26 janvier 20112 13 sept. 2003 à 14:38
j'ai un probleme avec winsock, j'ai une erreur dont voici la description, Adresse en utilisation
j'arrive a me connecter une fois a un serveur (mail)
ensuite des que je me déconnecte, j'ai cet erreur qui se crée (j'ai recupéré la description de l'erreur par
Private Sub Winsock1_Error....
j'aimerais savoir comment reinitialiser directement winsock pour ne plus avoir cette erreur
cs_fatimatou
Messages postés6Date d'inscriptiondimanche 13 février 2005StatutMembreDernière intervention16 juin 2005 25 mai 2005 à 19:24
salut, mon probléme c'est que je veux réaliser le scan d'un réseau LAN avec le broadcast ou multicast ,alors comment faire ça sous VB avec winsock.Merci
djtomek959
Messages postés5Date d'inscriptionvendredi 31 décembre 2004StatutMembreDernière intervention11 février 2008 17 juin 2005 à 18:20
bonjour à tous, je voudrais étudier Merise, Visual Basic, Transact SQL.
j'ai les cours mais ce que je veux savoir le temps nécéssaire pour chaque un de ces derniers pour en moins avoir une base solide.
c'est trés important pour moi, et j'ai pas beaucoup de temps.
je vous remercie d'avance .