
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
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



