1. Introduction

Tout atelier de génie logiciel se doit de gérer correctement toutes l'ensemble des fonctions relatives aux réseaux et en particulier à l'Internet. Dans l'environnement Visual Basic 6, cette tâche est assurée par le contrôle Microsoft Winsock, qui constitue un moyen simple et rapide de construire de véritables applications réseau combinées à l'environnement graphique d'une application écrite en Visual Basic.

Tout au long de cette série de documents, vous apprendrez à construire des applications réseaux avec Visual Basic. De plus, ces documents essaieront d'expliquer le fonctionnement de tel ou tel service, de sorte que les méthodes et les "trucs" utilisés pourront facilement être transposés à un autre environnement de développement.

2. Ajouter le contrôle Winsock au projet VB

Pour ajouter le contrôle Microsoft Winsock, il suffit d'ouvrir le menu "Composants" (en appuyant sur Ctrl-T par exemple), et de sélectionner "Microsoft Winsock Control 6.0" dans la liste:

Image non disponible

Une fois l'opération effectuée, on peut ajouter une instance de contrôle Winsock sur le formulaire:

Image non disponible

Par défaut, le contrôle s'appellera Winsock1, et nous allons utiliser ce nom tout au long des tutoriels.

Et voilà! Le développement peut commencer!! :o)

3. Les propriétés basiques du contrôle Winsock

Le contrôle Winsock est vraiment très simple d'utilisation; ses propriétés et méthodes essentielles sont étonnamment peu nombreuses:

Note: Ici sont détaillées seulement les propriétés basiques du contrôle Winsock relative à la construction d'une application cliente. La leçon 5 traite des propriétés avancées de Winsock et un tutoriel sera fait concernant la conception d'un serveur en VB.

  • Connect: Cette propriété permet de se connecter (si-si!) à une machine distante, en spécifiant le nom de la machine et le port de connexion, par exemple:

Winsock1.Connect "ftp.microsoft.com",21

On dit ici au contrôle Winsock de se connecter au serveur ftp.microsoft.com sur le port 21, c'est-à-dire le port FTP. Chaque port correspond à un service particulier, dont voici une petite liste:

N° Port Protocole Description
7 Echo Renvoie l'écho du paquet envoyé
13 DayTime Renvoie l'heure du serveur
21 FTP (File Transfer Protocol) Transfert de Fichiers
23 Telnet Terminal UNIX
25 SMTP (Simple Mail Transfer Protocol) Envoi de mails
79 Finger Rapport d'activité d'un système UNIX
80 HTTP (HyperText Transfer Protocol) Protocole Web
110 POP3 (Post Office Protocol 3) Réception de mails
119 NNTP (Network News Transfer Protocol) Protocole USENET
139 NetBIOS SAMBA, partages Windows etc...
6000 X Window System Interface Graphique UNIX
  • Connect(): Cet événement (à ne pas confondre avec la propriété qui précède) est activé lorsque la connexion avec le serveur est établie, par exemple:
 
TéléchargerCacherSélectionnez
  • SendData: Cette méthode permet d'envoyer des données une fois la connexion établie, par exemple:

Winsock1.SendData "USER boulet" & vbCrLf

On envoie ici notre login (USER) obligatoirement terminé par un retour chariot et saut de ligne (vbCrLf). La plupart des protocoles requièrent de terminer toute commande par vbCrLf (sauf exceptions qu'on précisera).

Plus généralement, on peut passer en paramètre à SendData toute variable String, par exemple:

 
TéléchargerCacherSélectionnez
  • DataArrival: Cette procédure est déclenchée par le contrôle Winsock à chaque fois qu'il réceptionne des données. Dans cette procédure, on lira les données avec la méthode GetData.
  • GetData: Cette méthode permet de recevoir des données une fois la connexion établie, par exemple:
 
TéléchargerCacherSélectionnez

Dans 99% des cas, cette méthode est appelée dans la procédure DataArrival pour gérer les données entrantes, par exemple:

 
Sélectionnez
1.
2.
3.
4.
5.
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strdata As String 
Winsock1.GetData strdata
Output.Text = strdata
End Sub
  • Close : Cette méthode force la fermeture de la connexion du contrôle Winsock. Il faut toujours l'appeler lors de la fermeture de l'application, par exemple comme cela:
 
TéléchargerCacherSélectionnez
  • LocalPort : Cette méthode précise le port local qui sera utilisé par le contrôle Winsock sur la machine locale. Normalement, elle est fixée automatiquement, sauf dans le cas d'un programme serveur, que nous traiterons plus tard.

Remarque ultra-importante ou comment fermer la connection Winsock proprement!!!

Il est absolument nécessaire de fermer proprement la connexion Winsock. Toutefois, puisque nous sommes dans une application client/serveur et que le serveur ne nous appartient pas, c'est lui qui nous impose les règles de fermeture. La plupart du temps, une fois la requête du client satisfaite, la connexion rentre "en hibernation", dans laquelle elle reste pour une durée fixée par le serveur ( une dizaine de minute en général).

Le problème, c'est qu'une connexion en hibernation n'est pas fermée, et si on essaie de se reconnecter une deuxième fois avec la même application, on aura une erreur "Opération Invalide dans l'État Courant", ce qui est logique puisque la connexion n'est pas fermée.

De la même façon, une connexion Winsock utilise un port virtuel sur la machine (stockée, le temps de la connexion, dans la variable LocalPort). Et tant que la connexion n'est pas fermée, le port reste utilisé, ce qui signifie qu'il est impossible de le réutiliser pour une deuxième connexion.

Par conséquent la manière la plus propre de fermer une connexion Winsock, et aussi surprenant que ça puisse paraître, est de le faire avant d'appeler la procédure de connexion:

 
TéléchargerCacherSélectionnez

Ce code est une mesure de sécurité à respecter absolument (sinon la connexion ne marchera qu'une seule fois et plantera à la deuxième, ce qui est assez embêtant).

Voilà, ce sont là toutes les propriétés du contrôle Winsock qu'il faut connaître pour construire une application réseau simple... C'est aussi simple que ça!

Mais assez de théorie et passons à la pratique. Nous allons à présent voir trois exemples de construction d'application qui vous permettront de mieux comprendre le fonctionnement du contrôle Winsock, formant ainsi un complément indispensable à cette introduction théorique.