Prise (réseau logicielle).
Fournir une API de communication entre applications distantes préservant la sémantique des opérations sur des fichiers (open, read, write, close).
Une socket représente un point de connexion sur :
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 :
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;<br> <strong>java.net.Socket</strong> socket = new <strong>java.net.Socket</strong> (<span class="codeString">"serverhost"</span>, serverPort);<br> <br> java.io.PrintWriter out = new java.io.PrintWriter (socket.getOutputStream(), true);<br> java.io.PrintWriter in = new java.io.BufferedReader (new java.io.InputStreamReader (socket.getInputStream()));
<br> out.println (<span class="codeString">"Requête"</span>);<br> String reponse = in.readLine();<br>
out.close();<br> in.close();<br> <br> socket.<strong>close</strong>();
Un exemple (simplifié) de serveur TCP en Java est :
int port = 8000;<br> <strong>java.net.ServetSocket</strong> server = new <strong>java.net.ServerSocket </strong>(serverPort);<br> <strong>java.net.Socket</strong> client = server.<strong>accept()</strong>;<br> <br> java.io.PrintWriter out = new java.io.PrintWriter (client.getOutputStream(), true);<br> java.io.PrintWriter in = new java.io.BufferedReader (new java.io.InputStreamReader (client.getInputStream()));<br> String requete = in
.readLine();<br> out.println (<span class="codeString">"Réponse"</span>);<br>
out.close();<br> in.close();<br> <br> client.<strong>close</strong>();<br> server.<strong>close</strong>();
Des exemples d'API de sockets sont :
java.net
)C:\windows\system32\drivers\etc\services
C:\winnt\system32\drivers\etc\services
C:\windows\services
/etc/services
avec éventuellement
des alias (les protocoles spécifiés doivent exister dans /etc/protocols
). Par exemple :ftp 21/tcp<br> domain 53/tcp nameserver<br> domain 53/udp nameserver<br> tftp 69/udp