Socket (1982)

Retour  |  Home  |  Contact

Prise (réseau logicielle).

Besoin

Fournir une API de communication entre applications distantes préservant la sémantique des opérations sur des fichiers (open, read, write, close).

Analyse

Les socket représente un point de connexion sur :

Conception

Type de socket Famille de protocole Client Serveur Client et serveur
PF_INET PF_UNIX PF_NS AppleTalk Création Connexion au serveur Association à une adresse Création   Configuration de la file d'écoute Attente d'une connexion cliente Lecture Ecriture
Connecté (SOCK_STREAM) TCP O     socket connect N/A socket bind listen accept read write
Non connecté (SOCK_DGRAM) UDP O     socket N/A bind socket bind N/A N/A recvfrom sendto
Brut IP                        
Famille d'adresses AF_INET (adresse IP + port) AF_UNIX (nom arborescence Unix) AF_NS    

L'utilisation de sockets implique typiquement les opérations suivantes :

  1. Création de la socket (socket) en mode :
  2. Communication établie (bind, listen, connect ou accept)
  3. Echange de données (read/write ou sendto/recvfrom).
  4. Fermeture de la communication (close ou shutdown)
    1. Envoi de TCP Finish (<FIN>)
    2. L'autre partie confirme (<ACK><FIN>). Sans confirmation au bout d'un temps moyen de réponse constaté (ou valeur de l'option Berkekey SO_LINGER), la socket fermante émet un TCP Abort (<RST>) et ferme unilatéralement.
    3. La socket fermante reconfirme (<ACK>)

Implémentation

En Java l'API des socket se trouve dans le package java.net. Une fois les sockets établies, c'est l'API des entrées-sorties (java.io) qui prend le relai pour l'écriture et lecture de données.

Un exemple (simplifié) de client TCP en Java est :

int             port    = 8000;
java.net.Socket socket  = new java.net.Socket        ("serverhost", serverPort);

java.io.PrintWriter out = new java.io.PrintWriter    (socket.getOutputStream(), true);
java.io.PrintWriter in  = new java.io.BufferedReader (new java.io.InputStreamReader (socket.getInputStream()));

out.println ("Requête");
String reponse = in.readLine();
out.close();
in.close();

socket.close();

Un exemple (simplifié) de serveur TCP en Java est :

int             port    = 8000;
java.net.ServetSocket server = new java.net.ServerSocket (serverPort);
java.net.Socket client  = server.accept();

java.io.PrintWriter out = new java.io.PrintWriter    (client.getOutputStream(), true);
java.io.PrintWriter in  = new java.io.BufferedReader (new java.io.InputStreamReader (client.getInputStream()));
String requete = in
.readLine();
out.println ("Réponse");
out.close();
in.close();

client.close();
server.close();

Exemples

Des exemples d'API de sockets sont :

Notes

Voir

Retour  |  Home  |  Contact