VBplus - www.vbasic.org

Sommaire / Notre équipe / Nouveautés / Bulletins
Apprendre & Progresser / Aider & Etre aidé

 
VBguides

Le contrôle Winsock

Le contrôle Winsock fourni par Visual Basic 5 permet de gérer relativement simplement un flot de données à l'aide des protocoles TCP ou UDP. Ce contrôle est destiné à développer des applications Client / Serveur.

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.


 
VI - Exemple de mise en oeuvre

Application SERVEUR :

    Contrôle appelé WSCK_serveur
        WSCK_serveur.localport = 1234
        WSCK_serveur.protocol = 0

Application CLIENT :
   
    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".

Merci à Alexis Rolland pour avoir écrit ce guide !

Contacter le webmaster
Copyright © 1999 VBplus  -  Tous Droits Réservés  -  Reproduction Interdite

 Digiweb France - Web Presence Provider