Winsock - Partie 1 : Les bases


#1 - Cours théorique

0) Introduction

Le but de ce cours va être de vous apprendre àmettre en place une application réseau client/serveur. Nous utiliserons le contrôle Microsoft Winsock qui permet de gérer très simplement les connections réseaux.

1) Principe d'une connection client/serveur

Pour établir une connection, il doit y avoir deux applications : d'une part le serveur qui attend une connection et de l'autre le client qui se connecte au serveur.
D'une manière simplifiée une connection se déroule comme ceci :
- Le serveur écoute sur un port et est prêt àaccepter une connection
- Le client envoie une demande de connection au serveur
- Le serveur accepte et établit la connection
- Le serveur et le client s'échangent des informations

2) Propriétés, méthodes et événements principales du contrôle Winsock

************************************************************
# PROPRIETES #1
************************************************************

tr> tr> tr> tr>
[Index] -------------------------- Renvoie ou détermine le numéro identifiant le contrôle, lorsque plusieurs contrôles portent le même nom. Utilisépour faire plusieurs connections
[LocalHostName] --------------- Renvoie le nom d'hôte local
[LocalIP] ------------------------ Renvoie l'IP locale
[LocalPort] ---------------------- Renvoie ou détermine le port sur lequel le serveur doit écouter ou celui àpartir duquel le client doit se connecter. Facultatif dans le cas du client
[Protocol] ----------------------- Renvoie ou détermine le protocole àutiliser : TCP ou UDP. Dans la majeure partie des cas c'est sckTCPProtocol qui est utilisé
[RemoteHost] ------------------ Renvoie ou détermine l'hôte distant
[RemoteHostIP] ---------------- Renvoie l'IP de l'hôte distant
[RemotePort] ------------------- Renvoie ou détermine le port de l'hôte distant
[State] -------------------------- Renvoie l'état de la connection

************************************************************
# METHODES #2
************************************************************

---------------------------
[ Accept (requestID As Long) ]
---------------------------

>Accepte une demande de connection et l'établit
>|requestID| : Identifiant de la demande de connection (obtenu grâce àl'événement ConnectionRequest )

---------------------------
[ Close ]
---------------------------

>Ferme la connection

---------------------------
[ Connect (RemoteHost, RemotePort) ]
---------------------------


>Se connecte àl'hôte spécifiésur le port indiqué
>|RemoteHost| : Hôte distant (si non spécifiécelui défini par la propriétéRemoteHost)
>|RemotePort| : Port de l'hôte distant (si non spécifiécelui défini par la propriétéRemoteHost)

---------------------------
[ GetData (data, type, maxLen) ]
---------------------------

>Récupère les données reçues par le contrôle
>|data| : Variable dans laquelle les données seront stockées
>|type| : Type de donnée àrecevoir (spécifiépar les constantes : vbString, vbInteger, ...) (facultatif si data est déclaré)
>|maxLen| : Taille maximum des données àrecevoir (facultatif)

---------------------------
[ Listen ]
---------------------------

>Met le serveur en attente d'une connection

---------------------------
[ PeekData (data, type, maxLen) ]
---------------------------

>Identique àGetData sauf que le tampon de réception n'est pas vidéentre chaque envoi

---------------------------
[ SendData (data) ]
---------------------------
>Envoie les données spécifiées
>|data| : données àenvoyer

************************************************************
# EVENEMENTS #3
************************************************************

---------------------------
[ Close() ]
---------------------------
>Fermeture de la connection par l'autre application

---------------------------
[ Connect() ]
---------------------------
>Le contrôle se connecte

---------------------------
[ ConnectionRequest (ByVal requestID As Long) ]
---------------------------

>Le contrôle reçoit une demande de connection
>|requestID| : Identifiant de la demande de connection (pour pouvoir l'accepter avec la méthode Accept)

---------------------------
[ DataArrival (ByVal bytesTotal As Long) ]
---------------------------
>Le contrôle reçoit des données
>|bytesTotal| : Taille des données reçues

---------------------------
[ Error (ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) ]
---------------------------

>Une erreur se produit
>|Number| : N°de l'erreur
>|Description| : Description de l'erreur
>|CancelDisplay| : Détermine si le message d'erreur doit s'afficher

---------------------------
[ SendComplete() ]
---------------------------

>Se produit lorsque l'envoi de données est terminé

---------------------------
[ SendProgress (ByVal bytesSent As Long, ByVal bytesRemaining As Long) ]
---------------------------

>Envoi de données
>|bytesSent| : Renvoie le nombre d'octets envoyés
>|bytesRemaining| : Renvoie le nombre d'octets restants









(c) - CYBER@TOM ASSOCIATION 2000-2004