Programmation réseau - les sockets

 

Remarque, je ne vais pas faire ici un cours sur le réseaux Je suppose donc acquis les termes suivant:

Modèle de Réseaux Multicouches: Application, Présentation, Session, Transport, Réseau, Lien de données, Physique, ainsi que les entêtes de paquet,

TCP (RFC 793) et IP (RFC 791), ...

De toute façon, tout ceci est presque transparent avec l'utilisation des sockets.

 

Ce qui suit était prévu à l'origine pour le monde Unix, mais il n'y a que peu de différences avec celui de Windows. Les exemples peuvent d'ailleurs être utilisés indifférement sous les deux systèmes !

Les sockets constituent un mécanisme qui a été initialement fourni sur B.S.D. (Berkeley Software Distribution) d’UNIX.

Les sockets permettent à divers processus de communiquer (peu importe le moyen physique (RJ45, série), cela ne vous regarde pas !) aussi bien sur une même machine qu'à travers un réseau TCP/IP.

Cette méthode de communication a été repris dans différents systèmes : Les systèmes Unix mais aussi Windows.

Un socket peut être identifié de manière unique grâce à une adresse IP et un port.

 

Deux modes de communication

Il existe deux modes de communication:

  • Le mode connecté utilisant le protocole TCP. Dans ce cas, une connexion durable est établie entre les deux processus.
  • Le mode non connecté, utilisant le protocole UDP. Il est alors nécessaire d'indiquer l'adresse de destination à chaque envoi. Il n'y aura pas d'accusé réception, ce sera à vous de développer cette partie (Par exemple en faisant en sorte que l'émetteur retourne le même paquet si le récepteur ne répond pas ou bout d'un moment).

Dans un premier temps, nous étudierons le mode connecté, c'est celui-ci qui est le plus souvent utilisé...

 

Etablir une communication en mode connecté

Le principe général pour établir une communication est le suivant:

  • Un processus serveur est lancé: C'est un processus qui va tourner continuellement en attendant qu'un (ou plusieurs) processus demande(nt) à se connecter (il s'agit de la phase d'écoute).
  • Un processus client est lancé: C'est un code qui a besoin de communiquer, il va donc demander à être connecter au processus serveur.
  • Le processus serveur accepte ou non. S'il accepte, il pourra répondre aux requètes du client.
  • Le processus client passe ses requètes au processus serveur (c'est ici qu'il y aura échange de données entre les processus).
  • Lorsque tous deux n'ont plus rien à se dire, il faut mettre fin à la communication.

 

Voici les chapitres:

- Outils de conversion d'adresses IP

  • Source de problèmes en perspective !!!
  • Les includes
  • Détails des fonctions htons(), htonl(), ntohs() et ntohl()

- Information sur le host

  • gethostbyname(), gethostbyaddr() (client vers host) mais aussi getpeername (host vers client)

- Principales fonctions de gestion des sockets

  • Initialisation sous Windows (WSAStartup() et WSACleanup())
  • Création d'un socket (socket())
  • Héritage d'un socket
  • Fermeture d'un socket (closesocket(), close(), shutdown())

- Les fonctions à utiliser côté serveur mode connecté

  • Attacher un socket à une adresse et à un port local, préparation à l'écoute du socket - bind()
  • Initialiser le socket dans un état d'écoute pour n clients (en mode connecté - TCP) - listen()
  • Permettre une connexion en acceptant un appel - accept()

- Les fonctions à utiliser côté client mode connecté

  • Se connecter à une machine distante - préparation à l'émission - connect()
  • Et la suite...

- Transmettre/lire des informations mode connecté

  • Transmettre (Envoyer) send, lire (recevoir) recv, débloquer le send recv ioctl et fonctl

- Exemple de client/serveur mode connecté

 

Des liens intéressants

http://vidalc.chez.com/lf/socket.html#whatis Bien détaillé et en français qui plus est !