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.
Pour tous renseignements, vous pouvez m'envoyer un mail à paolucci@ist.cirad.fr.