|
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
************************************************************
| [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 |
tr>
[RemotePort]
------------------- |
Renvoie
ou détermine le port de l'hôte distant |
tr> tr> tr>
[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
|