Je fais un petit cours sur Winsock [:P]

VbBigBrotherdV - 27 juil. 2001 à 02:52
djtomek959 Messages postés 5 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 11 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.




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".

Bon j'espére que ça vous aura servi à comprendre les connexions et les protocoles ...

à + , Catalin

6 réponses

Cool, pourquoi ne pas mettre cela dans les sources dans la catégorie tutorial ? je pense qu'il y trouvera sa place ;)

A++

Nix :-p
0
VbBigBrotherdV
29 juil. 2001 à 17:10
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 ...

A la prochaine a tous ...

Catalin .
0
misterzinzin Messages postés 112 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 26 janvier 2011 2
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

merci

moi, le seul, l'unique, ZinZin :blush)
0
ZedMaTrix Messages postés 178 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 14 août 2008
27 avril 2005 à 20:36
MERCI !!!!!!!!!!

Grace a toi, mon log de FTP se connecte en mode actif, et recoit bien la liste car il accepte bien la connexion grace a ton tuto !!!!

Je te doit une fiere chandelle !

ZedMaTriX
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_fatimatou Messages postés 6 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 16 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
0
djtomek959 Messages postés 5 Date d'inscription vendredi 31 décembre 2004 Statut Membre Dernière intervention 11 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 .
0
Rejoignez-nous