Vous êtes sur la page 1sur 19

Chapitre 2

Communication Client/Serveur
Les Sockets
Abdallah GHOURABI
gh.abdallah@gmail.com

2017/2018 SI3 – Systèmes Répartis


Plan
2

Présentation des Sockets


Les Sockets Java
Socket TCP en Java
Socket UDP en Java
Présentation des Sockets

3
Techniques de communication dans un
modèle Client/Serveur
4

Problématique
Réaliser un service réparti en utilisant les protocoles de
transport (TCP, UDP)
Mise en œuvre
Bas niveau
Utilisation directe de la couche transport
Sockets : mécanisme universel de bas niveau, utilisable depuis
tout langage (exemple : C, Java)
Haut niveau
Utiliser les services offerts par les middlewares (logiciels
médiateurs)
Appel de procédure à distance (RPC), dans un langage particulier ;
exemple : C
Appel de méthode à distance, dans les langages à objets ;
exemple : Java RMI
Identification d’un service
5

Le serveur (machine physique) peut comporter différents services:


L’adresse IP du serveur ne suffit pas,
il faut préciser le service demandé au moyen d’un numéro de port, qui
permet d’atteindre un processus particulier sur la machine serveur.
Un numéro de port comprend 16 bits (0 à 65 535).
Les numéros de 0 à 1023 sont réservés, par convention, à des
services spécifiques.
Exemples :
22 : ssh, 23 : Telnet (connexion à distance)
80 : serveur web, 25 : mail (SMTP), 21: FTP
Présentation des Sockets
6

Les sockets représentent une interface de programmation


pour les communications entre processus.
Elles ont été introduites pour la première fois en 1986 dans
les systèmes UNIX BSD
Les sockets sont des portes d'entrées/sorties vers le réseau
Envoi et réception de données entre deux processus
Deux modes de communication
mode non connecté (sans connexion)
messages (ou datagrammes)
transport non fiable
mode connecté (avec connexion)
séquences de données (stream)
transport fiable
Adressage des sockets
7

Une socket est identifiée par une adresse de


transport qui permet d'identifier les processus de
l'application concernée.
Une adresse de transport = un numéro de port
(identifie l'application) + une adresse IP (identifie
le serveur ou l'hôte dans le réseau).
Un numéro de port quelconque peut être choisi
entre 1024 et 65535 à condition qu’il soit unique
sur la même machine.
Principe de base
8

Objectif : échange de messages entre 2 processus situés dans 2


machines distantes
1. Chaque machine crée une socket,
2. Chaque socket sera associée à un port de sa machine hôte,
3. Les deux sockets seront explicitement connectées si on utilise un
protocole en mode connecté,
4. Chaque machine lit et/ou écrit dans sa socket,
5. Les données vont d’une socket à une autre à travers le réseau,
6. Une fois terminé chaque machine ferme sa socket.
Rappels Réseau

9
Les 7 couches du modèle OSI
10

Couche 7 - Applicative : Les logiciels (ex : HTTP, FTP)


Couche 6 - Présentation : Représentation des données (ex : XDR)
Couche 5 - Session : Établissement et maintient des sessions (ex : RPC)
Couche 4 - Transport : Liaison de bout en bout (ex : UDP, TCP, ...)
Couche 3 - Réseau : Adressage et routage entre machines (ex : IP)
Couche 2 - Liaison : Gestion des envois point à point (ex : Ethernet)
Couche 1 - Physique : Support de transmission

Les sockets se situent juste au-dessus de la couche transport du


modèle OSI (protocoles UDP ou TCP)
2 modes de communication
11

Mode connecté : la communication entre un client et


un serveur est précédée d’une connexion et suivie
d’une fermeture
Facilite la gestion d’état
Meilleurs contrôles des arrivées/départs de clients
Uniquement communication unicast
Plus lent au démarrage

Mode non connecté : les messages sont envoyés


librement
Plus facile à mettre en œuvre
Plus rapide au démarrage
Les protocoles TCP et UDP
12

TCP
Mode connecté : protocole de prise de connexion (lent)
Sans perte : un message arrive au moins un fois
Sans duplication : un message arrive au plus une fois
Avec fragmentation : les messages peuvent être coupés
Ordre respecté : messages délivrés dans l’ordre d’émission
Exemple : une communication de type téléphone

UDP
Mode non connecté : pas de protocole de connexion (plus rapide)
Avec perte : l’émetteur n’est pas assuré de la délivrance
Avec duplication : un message peut arriver plus d’une fois
Sans fragmentation : les messages envoyés ne sont jamais coupés
Ordre non respecté : messages délivrés dans l’ordre d’arrivé
Exemple : une communication de type courrier
Les Sockets Java

13
Les Sockets en Java
14

Une Socket est une API (interface logicielle) avec


les services du système d’exploitation, qui permet
d’exploiter facilement et de manière uniforme les
services d’un protocole réseau.
Java défini plusieurs classes de sockets suivant le
protocole :
TCP : ServerSocket et Socket
UDP : DatagramSocket
Syntaxe Java
15

Sockets TCP en Java :


Class Socket : (coté client, et coté serveur en partie)
Constructeur :
Socket(String host, int port) : création d’une socket TCP connectée sur le port
et la machine hôte spécifiés.
Méthodes :
close() : ferme la socket.
OutputStream getOutputStream() : renvoie un flux de sortie pour cette socket.
IntputStream getIntputStream() : renvoie un flux d’entrée pour cette socket.

Class OutputStream Class InputStream


Méthodes : Méthodes :
write(…) : écrit dans le flux. read() : lit le flux.
close() : ferme le flux. close() : ferme le flux.
Syntaxe Java
16

Sockets TCP en Java :


Class ServerSocket : (coté serveur)
Constructeur :
ServerSocket(int port) : création d’une socket TCP associée au port spécifié.
Méthodes :
close() : ferme la socket.
Socket accept() : écoute la socket et attend une requête de connexion,
retourne une nouvelle socket sur laquelle écouter le nouveau client (et lui
seul)
Syntaxe Java
17

Sockets UDP en Java :


Class DatagramSocket : (coté client et coté serveur)
Constructeur :
DatagramSocket() : création d’une socket UDP, libre
DatagramSocket(int port) : création d’une socket UDP, liée à un port
Méthodes :
close() : ferme la socket.
receive(DatagramPacket p) : reçoit un « DatagramPacket » de cette socket.
send(DatagramPacket p) : envoie un « DatagramPacket » sur cette socket.

Class DatagramPacket
Constructeur :
DatagramPacket(byte[] buf, int length, InetAddress address, int port) :
création d’un paquet à destination d’une machine et d’un port spécifiés
Syntaxe Java
18

Sockets en Java : résolution de nom et d’adresse


Class InetAddress
Méthodes statiques : (appelables à tout moment, pas besoin de constructeurs)
static InetAddress getLocalHost() : Retourne l’adresse IP de l’hôte (local)
static InetAddress getByName(String host) :
static InetAddress[] getAllByName(String host) :
Retourne l’adresse ou un tableau d’adresse IP de la machine de nom spécifié.
Autres méthodes (applicables aux objets InetAddress)
String getHostAddress() : Retourne l’adresse IP en format « String »
String getHostName() : Retourne le nom de la machine correspondant à
l’adresse IP
InetAddress – Exemple
19

La classe InetAddress sert à représenter les adresses internet


Exp1
InetAddress a = InetAddress.getByName("www.essths.rnu.tn");
System.out.println(a.getHostAddress()+" = "+a.getHostName());

196.203.79.184 = www.essths.rnu.tn

Exp2
InetAddress b = InetAddress.getByAddress(new byte[] {8,8,8,8});
System.out.println(b.getHostAddress()+" = "+b.getHostName());

8.8.8.8 = google-public-dns-a.google.com

Vous aimerez peut-être aussi