Les sockets

Durant mon stage ingénieur, j'ai du utiliser les sockets : en voici un petit résumé...

Gethostbyname

Permet de passer d'une adresse de forme textuelle (ex : www.mygale.org) à une adresse IP sous la forme de 4 numéros (ex : 192.33.156.200).

Socket

Crée un socket et lui attribue un entier lui servant d'identificateur.

Bind

Associe un socket à une adresse IP.

Connect

Associe un socket à un port (un port étant un entier identifiant un service). Une même machine possède plusieurs milliers de ports : certains sont déjà affectés pour des services bien précis. Voici un tableau résumant les principaux services et leurs ports associés.

service

port

echo

7

daytime

13

ftp

21

telnet

23

smtp

25

time

37

nameserver

42

whois

43

domain

53

finger

79

hostnames

101

pop3

110

Vous pouvez donc vous affecter un port pour votre propre usage : mais faites bien attention à ce que celui-ci ne soit pas utilisé par une autre application.

Listen

Permet à un socket d'écouter afin de détecter de nouvelles connections.

Accept

Accepte une connection avec un socket qui est en mode listen : cette fonction retourne un socket que l'on pourra utiliser pour communiquer avec le client désirant la connection.

Select

"Scrupte" un (ou plusieurs) sockets pendant un laps de temps donné : le résultat est le nombre de sockets par lesquels une trame a transité pendant ce laps de temps.

Send

Envoie une trame à travers un socket donné.

Receive

Reçoit une trame ayant transité à travers un socket donné.

Shutdown

Abandonne l'utilisation d'un socket.

Closesocket

Abandonne l'utilisation d'un socket.

.

Précisions sous windows

Si vous devez utiliser les sockets, vous devez savoir certaines choses utiles :

Sous Windows, les sockets sont implémentées dans un fichier nommé "winsock.dll". Mais ce fichier n'existe que pour Windows 95 & Windows NT. Pour Windows 3.11 (et même pour Windows 3.11 for workgroups !), vous devrez utiliser un programme qui vous recréera la couche des sockets. Le plus répandu est assurément "Trumpet", qui est un shareware : on peut récupérer la dernière version (Trumpet 3) à l'adresse suivante : www.trumpet.com.au.

Attention !!! Si vous devez utiliser Trumpet 2.0b, vous risquez d'être confronté à un bug qui m'a donné du fil à retordre : lors d'un appel à Gethostbyname, et de façon aléatoire, Trumpet plante en nous renvoyant un magnifique "error 202" ; après de multiples échanges avec les créateurs et les utilisateurs de Trumpet au travers des news (newsroom.trumpet.com.au), j'ai réussi à savoir qu'il s'agissait d'un bug de Trumpet 2.0b. La seule solution est alors de passer à Trumpet 3.

De plus, Windows possède une spécificité par rapport à Unix : la première fonction qui doit être exécutée est la fonction "WSAStartup" qui permet de savoir si la version de winsock désirée par l'utilisateur est bien présente sur le système (habituellement, on utilise la version 1.1 de winsock.dll). Et vous devez finir l'utilisation des sockets par un appel à la fonction "WSACleanup".

.

Un petit exemple d'application client/serveur

La fonction des ces programmes est tres simple : on cree un serveur et le client lui envoie "coucou". Le serveur affiche a l'ecran les principales operations le concernant (connexion de clients, deconnexion de clients, reception de trames...)

Ces programmes ont ete developpes sous UNIX sur un HP-9000.

socket.c

serveur.c

client.c

Pour tous renseignements, vous pouvez m'envoyer un mail à paolucci@ist.cirad.fr.