Introduction aux API sockets :
Sockets:
Une socket est:
Un point d’accès aux couches réseau
Liée localement à un port: Adressage de l’application sur le réseau : son
couple @IP:port
Elle permet la communication avec un port distant sur une machine
distante : c’est-à-dire avec une application distante
Différents types de sockets
Stream Sockets (TCP)
établir une communication en mode connecté
si connexion interrompue : applications informées
Exemples de services : ftp, http, smtp, telnet, BGP…
Datagram Sockets (UDP)
établir une communication en mode non connecté
données envoyées sous forme de paquets indépendants
de toute connexion. Plus rapide, moins fiable que TCP
Exemples de services : snmp, RPC, tftp, dhcp, dns,
RIP…
La notion de « port »:
Un service rendu par un programme serveur sur une machine
est accessible par un port.
Un port est identifié sur une machine par un nombre entier (16
bits).
Exemple:
Gestion du parallélisme sur le
serveur:
11
Sockets en mode connecté:
Principe
-flot bidirectionnel d’octets transférés
de façon fiable (ni perte, ni duplication) et ordonnée
entre deux locuteurs préalablement « connectés »
= = > service TCP utilisé
-trois phases nécessaires à programmer :
établissement de connexion:
• Un initiateur (l’entité « client » : ouverture active)
• Un répondant (l’entité « serveur » : ouverture passive)
transfert de données:
• Requêtes, réponses (selon le protocole applicatif)
libération de connexion
• Bi partie
12
Sockets en mode connecté:
Ouverture passive (côté « répondant ») : (1/2)
Conception :
Dédier une socket destinée à intercepter des demandes
d’établissement de connexion
= = > socket générique d’écoute
Caractériser cette socket en terme de communication :
-au moins un numéro de port (associé au service)
-éventuellement une adresse IP (interface cible)
Lui permettre de scruter et stocker les demandes de
connexions entrantes avant acceptation
-paramétrer la taille de la FIFO des requêtes
13
Sockets en mode connecté:
Ouverture passive (côté « répondant ») : (2/2)
Programmation en JAVA :
Classe ServerSocket
Trois constructeurs possibles:
-numéro_port (obligatoire)
-Et taille maximale FIFO
-Et Adresse IP
14
Ouverture active (côté « initiateur ») : (1/2)
Conception :
Créer une socket localement (et éventuellement la
caractériser)
L’utiliser pour demander l’établissement d’une connexion
TCP avec un processus distant « répondant »
Spécifier ce dernier grâce aux caractéristiques de
communication de sa socket générique d’écoute :
-numéro de port
-Adresse IP
15
Sockets en mode connecté:
Ouverture active (côté « initiateur ») : (2/2)
Programmation en JAVA
Classe Socket
Quatre constructeurs possibles
-@sse IP ou nom_host distant ET numéro_port
distant (obligatoires)
-Et @sse IP ou nom_host local ET numéro_port
local
16
Sockets en mode connecté:
Acceptation d’ouverture (côté « répondant ») : (1/2)
Conception :
Le processus doit être bloqué tant qu’aucune demande de
connexion ne lui parvient sur la socket générique d’écoute :
= = > fonction bloquante
L’acceptation consiste à considérer positivement une
demande reçue et à créer localement une socket spécifique
dédiée à supporter l’échange de données sur cette connexion
particulière
= = > Cette socket représente l’extrémité « serveur »
de la connexion TCP initiée par un « client » distant.
17
Sockets en mode connecté:
Acceptation d’ouverture (côté « répondant ») : (2/2)
Programmation en JAVA
Classe ServerSocket
Méthode accept
18
Sockets en mode connecté:
Transfert de données (des deux côtés) :
Conception :
EMISSION : Revient à Ecrire/Envoyer un message (x
octets) sur la connexion
RECEPTION : Revient à Lire/Recevoir un message (x
octets) sur la connexion
Programmation en JAVA
Classe Socket
Emission : méthode getInputStream
Réception : méthode getOuputStream
19
Sockets en mode connecté:
Libération de connexion (des deux côtés) :
Conception :
Fermeture totale :revient à fermer l’extrémité d’une
connexion : = = > émission et réception deviennent
impossibles
Fermeture partielle : possible selon les technologies
= = > émission ou réception devient impossible
Programmation en JAVA:
Classe Socket
méthode close
méthodes shudownInput et shutdownOutput
20
Sockets en mode connecté:
Principe:
Datagrammes individuels transférés
-de façon non fiable, du « mieux »possible
-pas de connexion entre émetteur(s) et récepteur
= = > service UDP utilisé
Une seule phase à programmer :(transfert de données)
-envoi et réception possibles (de requêtes et de réponses
selon le protocole applicatif)
-détermination de l’expéditeur par le récepteur; Il peut
ensuite devenir destinataire.
Libération de port après usage
21
Sockets en mode non connecté:
Création et caractérisation d’une socket
Conception :
Créer une socket localement
Le caractériser si réception de données prévue: Numéro de port
prédéfini côté « serveur »
Programmation en JAVA
Classe DatagramSocket
Trois constructeurs possibles
-sans paramètre : port anonyme local
-avec no_port local
-et @sse IP_locale
22
Sockets en mode non connecté:
Transfert de données (des deux côtés) :
Conception :
EMISSION : Envoyer X octets vers une socket distante dont
on précise les caractéristiques
RECEPTION : Recevoir X octets provenant d’une socket
distante dont on récupère les caractéristiques pour en
déterminer l’origine.
Programmation en JAVA: (1/2)
Classe SocketDatagram
-Emission : méthode send
-Réception : méthode receive
-Gestion d’association : méthodes connect et disconnect
23
Sockets en mode non connecté:
Programmation en JAVA: (2/2)
Classe DatagramPacket
-Constructeurs pour l’envoi
-Constructeurs pour la réception