• Aucun résultat trouvé

Le modèle client-serveur

N/A
N/A
Protected

Academic year: 2022

Partager "Le modèle client-serveur"

Copied!
60
0
0
En savoir plus ( Page)

Texte intégral

(1)

Le modèle client -serveur

Introduction

Chris tia n Bulfone

chris tia n.bulfone @ gips a -la b.fr

www.gips a -la b.fr/~chris tia n.bulfone /

(2)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Encapsulation : rappel

Données (+PAD) Adresse

Source Adresse

Destination Type FCS

En-tête IP Données Données

En-tête UDP

Données

Données En-tête

TCP

Données

Application

Transport

Paquet UDP Segment TCP

Internet

Datagramme IP

Accès réseau

Trame (Ethernet)

(3)

veur – Master IC2A/DCISS – Christian Bulfone

Les applications réseau

• Les applications sont la raison d’être des réseaux informatiques

• Partie visible pour l’utilisateur

• Développement considérable de leur nombre depuis les débuts d’Internet

• Ont évolué au fil des années

• Sous forme textuelle au tout début : messagerie

électronique, accès aux terminaux distants, transfert de fichiers …

• Multimédia aujourd’hui : diffusion radio/vidéo à la demande (podcasting), visioconférence, téléphonie sur IP (VoIP) …

• Sont basées sur la communication entre 2 entités

(4)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Principe du client / serveur

• Repose sur une communication d’égal à égal entre les applications

• Communication réalisée par dialogue entre processus deux à deux

• un processus client

• un processus serveur

• Les processus ne sont pas identiques mais forment plutôt un système coopératif se traduisant par un échange de données

• le client réceptionne les résultats finaux délivrés par le serveur

• Le client initie l’échange

• Le serveur est à l’écoute d’une requête cliente éventuelle

• Le service rendu = traitement effectué par le serveur

(5)

veur – Master IC2A/DCISS – Christian Bulfone

Serveur

• Un programme serveur

• tourne en permanence, attendant des requêtes

• peut répondre à plusieurs clients en même temps

• Nécessite

• une machine robuste et rapide, qui fonctionne 24h/24

• alimentation redondante, technologie RAID …

• la présence d’administrateurs systèmes et réseau

pour gérer les serveurs

(6)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Avantages du client / serveur

• Unicité de l'information (non dupliquée)

• Meilleure sécurité

• un faible nombre de points d’entrée pour accéder aux données (meilleur contrôle, ex: serveur impression)

• Meilleure fiabilité

• les clients ne sont pas des ressources critiques

• seul l’est le serveur (clients interchangeables)

• Facilité d'évolution

• il est très facile de rajouter ou d'enlever des clients, et

même des serveurs

(7)

veur – Master IC2A/DCISS – Christian Bulfone

Exemples

• Serveur de fichiers (NFS, SMB)

• Serveur d’impression (lpd, CUPS)

• Serveur de calcul

• Serveur d’applications

• Serveur de bases de données

• Serveur de temps

• Serveur de noms (annuaire des services)

(8)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Le modèle client / serveur

• Le client de ma nde l’e xé cution d’un s e rvice

• Le serveur ré a lis e le s e rvice

• Clie nt e t s e rve ur s ont gé né ra le me nt loca lis é s s ur de ux ma chine s dis tincte s (il s ’a git pa rfois de la mê me

ma chine )

client

requête

réponse

serveur

(9)

veur – Master IC2A/DCISS – Christian Bulfone

Le modèle client / serveur

• Communication par messages

• Requête : paramètres d’appel, spécification du service requis

• Réponse : résultats, indicateur éventuel d’exécution ou d’erreur

• Communication synchrone (dans le modèle de base) : le client est bloqué en attente de la réponse

Client Serveur

requête

réponse

exécution

du service

(10)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Gestion des processus

• Client et serveur exécutent des processus distincts

• Le client est suspendu lors de l’exécution de la requête (appel synchrone)

• Plusieurs requêtes peuvent être traitées par le serveur

mode ité ra tif

mode concurre nt

(11)

veur – Master IC2A/DCISS – Christian Bulfone

Gestion des processus

• Mode de gestion des requêtes

 itératif

• le proce s s us s e rve ur tra ite le s re quê te s le s une s a prè s le s a utre s

 concurrent ba s é s ur

• pa ra llé lis me ré e l

• s ys tè me multiproce s s e urs pa r e xe mple

• ps e udo-pa ra llé lis me

• s ché ma ve ille ur-e xé cuta nts

• la concurre nce pe ut pre ndre plus ie urs forme s

• plus ie urs proce s s us (une mé moire virtue lle pa r proce s s us )

(12)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Gestion des processus dans le serveur

• Processus serveur unique

while (true) {

receive (client_id, message)

extract (message, service_id, params) do_service[service_id] (params, results) send (client_id, results)

}

   

traitement

requêtes

réponse

sélection

(13)

veur – Master IC2A/DCISS – Christian Bulfone

Gestion des processus dans le serveur

• Schéma veilleur-exécutants

while (true) {

receive (client_id, message)

extract (message, service_id, params) p = create_thread (client_id, service_id, params)

}

programme de p

do_service[service_id] (params, results) send (client_id, results)

exit

sélection

création

p

Processus veilleur Création dynamique des

exécutants

(14)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Mise en œuvre du modèle client / serveur

• Besoin d’un support pour transporter les informations entre le client et le serveur

• Bas niveau

• Utilisation directe du transport : sockets (cons truits s ur TCP ou UDP )

• Ha ut nive a u

• Inté gra tion da ns le la nga ge de progra mma tion : RP C ou Remote Procedure Call (cons truits s ur s ocke ts )

• Né ce s s ité d’é ta blir un protocole e ntre le clie nt e t le

s e rve ur pour qu’ils s e compre nne nt

(15)

veur – Master IC2A/DCISS – Christian Bulfone

Exemple de client / serveur

• Un serveur de fichiers

• Des clients qui demandent des fichiers

• Comment gérer la concurrence ?

• un processus serveur ⇔ un clie nt s e rvi

• plus ie urs clie nts ⇒ plus ie urs proce s s us s e rve ur

• Que l protocole utilis e r ?

• le clie nt e nvoie le nom du fichie r

• le s e rve ur re nvoie la ta ille puis le s donné e s

• comme nt gè re -t-on le s e rre urs ?

(16)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Les protocoles applicatifs

• Le protocole applicatif définit

• Le format des messages échangés entre émetteur et récepteur (textuel, binaire, …)

• Les types de messages : requête / réponse / informationnel …

• L’ordre d’envoi des messages

• Ne pas confondre protocole et application

• Une application peut supporter plusieurs protocoles (ex : logiciel de messagerie supportant POP, IMAP et SMTP)

• Navigateur et serveur Web s’échangent des

documents HTML en utilisant le protocole HTTP

(17)

veur – Master IC2A/DCISS – Christian Bulfone

Les sockets

• API ( Application Program Interface ) s ocke t

• mé ca nis me d'inte rfa ce de progra mma tion de s s ocke ts

• pe rme t a ux progra mme s d'é cha nge r de s donné e s

• le s a pplica tions clie nt/s e rve ur ne voie nt le s couche s de communica tion qu’à tra ve rs l’AP I s ocke t (a bs tra ction)

• n'implique pa s forcé me nt une communica tion pa r le ré s e a u

• le te rme « s ocke t » s ignifie douille , pris e é le ctrique fe me lle , bre f ce s ur quoi on bra nche que lque chos e

• L’AP I s ocke t s ’a pproche de l’AP I fichie r d’Unix

• Dé ve loppé e à l’origine da ns Unix BS D ( Berkeley

Software Distribution )

(18)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

L’API socket

accès réseau Application

cliente

IP TCP UDP

API socket

ICMP

protocole applicatif

réseau IP

accès réseau Application

serveur

IP TCP UDP

API socket

ICMP

(19)

veur – Master IC2A/DCISS – Christian Bulfone

Les sockets

• Avec les protocoles UDP et TCP, une connexion est entièrement définie sur chaque machine par :

• le type de protocole (UDP ou TCP)

• l'adresse IP

• le numéro de port associé au processus

• serveur : port local sur lequel les connexions sont attendues

• client : allocation dynamique par le système

(20)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Notion de port

• Un service rendu par un programme serveur sur une machine est accessible par un port

• Un port est identifié par un entier (16 bits)

• de 0 à 1023

• ports reconnus ou réservés

• sont assignés par l'IANA ( Internet Assigned Numbers Authority )

• donne nt a ccè s a ux s e rvice s s ta nda rd : courrie r (S MTP port 25), s e rve ur we b (HTTP port 80) …

• > 1024

• ports « utilisateurs » dis ponible s pour pla ce r un s e rvice a pplica tif que lconque

• Un s e rvice e s t s ouve nt connu pa r un nom (FTP, ...)

• La corre s ponda nce e ntre nom e t numé ro de port e s t donné e

pa r le fichie r /etc/services

(21)

veur – Master IC2A/DCISS – Christian Bulfone

Identification des protocoles

HTTP SMTP SSH DNS SNMP DHCP

TCP UDP

IP

ICMP ARP

port=80 port=25 port=22 port=53 port=161 port=67/68

proto=6 proto=17

proto=1

type=0x800 type=0x806

(22)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Les sockets

@ IP : 192.168.20.1 @ IP : 192.168.20.2

Couche Réseau (IP)

@ Ethernet Couche Liaison @ Ethernet

n° port : 2345

@ IP : 192.168.20.1

Couche Transport (TCP, UDP) n° port : 80

@ IP : 192.168.20.2

Client Serveur

Couches Session à Application

processus serveur processus

client

(23)

veur – Master IC2A/DCISS – Christian Bulfone

Principes de fonctionnement (mode concurrent)

 Le s e rve ur cré e une « s ocke t s e rve ur » (a s s ocié e à un port) e t s e me t e n a tte nte

 Le clie nt s e conne cte à la s ocke t s e rve ur

• De ux s ocke ts s ont a lors cré é s

• Une « s ocke t clie nt » côté clie nt

• Une « s ocke t s e rvice clie nt » côté s e rve ur

• Ce s s ocke ts s ont conne cté e s e ntre e lle s

« socket serveur » 80

« socket serveur » 80

4321 2345

« socket service client »

« socket client »

serveur

client

(24)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Gestion du parallèlisme sur le serveur

• Utilisation d’un seul processus serveur

• Les clients multiples sont traités en séquence

• les requêtes sont conservées dans une file d’attente associée à la socket serveur

• La longueur maximale de cette file d’attente peut être spécifiée lors de la création de la socket serveur (en Java)

Client 1

Client 2

  

sélection

Client 3

socket service client requêtes

file d’attente socket serveur

(25)

veur – Master IC2A/DCISS – Christian Bulfone

Gestion du parallèlisme sur le serveur

• Utilisation du schéma veilleur-exécutants

• Le thread ve ille ur doit cré e r e xplicite me nt un nouve a u thread e xé cuta nt à cha que nouve lle conne xion d’un clie nt (donc à l’e xé cution de a cce pt())

• Une « s ocke t s e rvice clie nt » diffé re nte e s t cré é e pour cha que clie nt

• Le thread ve ille ur s e re me t e ns uite e n a tte nte

while (true) {

accepter la connexion d’un nouveau client et créer une socket service client;

Client 1 créer

socket serveur

(26)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Mode connecté / non connecté

• Deux réalisations possibles

• Mode connecté (protocole TCP)

• Mode non connecté (protocole UDP)

• Mode connecté

• Ouverture d’une liaison, suite d’échanges, fermeture de la liaison

• Le serveur préserve son état entre deux requêtes

• Garanties de TCP : ordre, contrôle de flux, fiabilité

• Adapté aux échanges ayant une certaine durée (plusieurs

messages)

(27)

veur – Master IC2A/DCISS – Christian Bulfone

Mode connecté / non connecté

• Les requêtes successives sont indépendantes

• Pas de préservation de l’état du serveur entre les requêtes

• Le client doit indiquer son adresse à chaque requête (pas de liaison permanente)

• Pas de garanties particulières (UDP)

• gestion de toutes les erreurs à la main : il faut réécrire la couche transport !!!

• Adapté

• aux échanges brefs (réponse en 1 message)

• pour faire de la diffusion

• Mode non connecté

(28)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Mode connecté / non connecté

• Le client a l’initiative de la communication

• le serveur doit être à l’écoute

• Le client doit connaître la référence du serveur (adresse IP, numéro de port)

• en la trouvant dans un annuaire, si le serveur l’y a enregistrée au préalable

• en utilisant les numéros de ports préaffectés par convention

• Le serveur peut servir plusieurs clients

• Points communs

(29)

veur – Master IC2A/DCISS – Christian Bulfone

Utilisation du mode connecté

• Caractéristiques

• Établissement préalable d’une connexion (circuit virtuel) : le client demande au serveur s’il accepte la connexion

• Fiabilité assurée par le protocole (TCP)

• Mode d’échange par flots d’octets : le récepteur n’a pas

connaissance du découpage des données effectué par l’émetteur

• Possibilité d’émettre et de recevoir des caractères urgents

• Après initialisation, le serveur est « passif » : il est activé lors de l’arrivée d’une demande de connexion du client

• Un serveur peut répondre aux demandes de service de plusieurs clients : les requêtes arrivées et non traitées sont stockées dans une file d’attente

• Contraintes

(30)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Utilisation du mode non connecté

• Caractéristiques

• Pas d’établissement préalable d’une connexion

• Pas de garantie de fiabilité

• Adapté aux applications pour lesquelles les réponses aux requêtes des clients sont courtes (1 message)

• Le récepteur reçoit les données selon le découpage effectué par l’émetteur

• Contraintes

• Le client doit avoir accès à l’adresse du serveur (adresse IP, numéro de port)

• Le serveur doit récupérer l’adresse de chaque client pour lui

répondre

(31)

veur – Master IC2A/DCISS – Christian Bulfone

Généralisation du schéma client / serveur

• Les notions de client et de serveur sont relatives

• Un serveur peut faire appel à d’autres serveurs dont il est le client

• Architecture à 3 niveaux

• Exemple : un serveur Web faisant appel à un serveur de base de données

• Clients et serveurs jouent parfois un rôle symétrique

• Exemple : postes des réseaux Microsoft Windows

• Systèmes de pair à pair (Peer to Peer, P2P)

(32)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Format de représentation des données

• TCP/IP spécifie une représentation normalisée pour les entiers utilisés dans les protocoles

• appelée Network Byte Order

• re pré s e nte le s e ntie rs a ve c le MS B (Mos t S ignifica nt Bit) e n pre mie r

• Une a pplica tion doit re ns e igne r ce rta ine s informa tion du protocole e t pa r cons é que nt, doit re s pe cte r le Network informations Byte Order

• Exe mple le numé ro de port

• Le s a pplica tions doive nt tra ns la te r la re pré s e nta tion de s donné e s de la ma chine loca le ve rs le Network Byte Order

• pe rme t a ins i à de ux a pplica tions tourna nt s ur de s pla te forme s

diffé re nte s de communique r e ns e mble

(33)

L’API Socket en Java

(34)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

L’API socket en Java

• L'interface Java des sockets (package java.net) offre un accès simple aux sockets sur IP

• Plusieurs classes interviennent lors de la réalisation d'une communication par sockets

• La classe java.net.InetAddress permet de manipuler des adresses IP

• Mode connecté (TCP)

• La classe java.net.SocketServer permet de programmer l'interface côté serveur

• La classe java.net.Socket permet de programmer l'interface côté client et la communication effective par flot d’octets

• Mode non connecté (UDP)

• Les classes java.net.DatagramSocket et java.net.DatagramPacket permettent de programmer la communication en mode

datagramme

(35)

veur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.InetAddress

• Conversion de nom vers adresse IP

• méthodes permettant de créer des objets adresses IP

InetAddress InetAddress.getLocalHost() pour obte nir une InetAddress de l’hôte

InetAddress InetAddress.getByName(String id) pour obte nir une InetAddress d’une ma chine donné e

InetAddress[ ] InetAddress.getAllByName(String id) pour obte nir toute s le s InetAddress d’un s ite

• Le pa ra mè tre id pe ut ê tre un nom de ma chine (" prevert.upmf- grenoble.fr" ) ou un numé ro IP ("195.221.42.159")

• Ce s 3 fonctions pe uve nt le ve r une e xce ption

(36)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.InetAddress

• Conversions inverses

• Des méthodes applicables à un objet de la classe

InetAddress permettent d'obtenir dans divers formats des adresses IP ou des noms de site

String getHostName() obtie nt le nom comple t corre s ponda nt à l'a dre s s e IP

String getHostAddress() obtie nt l'a dre s s e IP s ous forme “%d.%d.%d.%d”

byte[] getAddress() obtie nt l'a dre s s e IP s ous forme

d'un ta ble a u d'octe ts

(37)

veur – Master IC2A/DCISS – Christian Bulfone

Exemples

Obtenir le nom et le numéro IP de la machine sur laquelle on travaille :

try{

InetAddress monAdresse = InetAddress.getLocalHost();

System.out.println(monAdresse.getHostName());

System.out.println(monAdresse.getHostAddress());

} catch(UnknownHostException uhe){

System.out.println("Inconnu !");

}

Obtenir le nom et le numéro IP d’une autre machine :

try{

InetAddress uneAdresse = InetAddress.getByName(nom);

System.out.println(uneAdresse.getHostName());

System.out.println(uneAdresse.getHostAddress());

(38)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.ServerSocket

• Cette classe implante un objet ayant un comportement de serveur via une interface par socket

• Constructeurs

ServerSocket(int port)

ServerSocket(int port, int backlog)

ServerSocket(int port, int backlog, InetAddress bindAddr)

• Cré e nt un obje t s e rve ur à l'é coute du port s pé cifié

• La ta ille de la file d'a tte nte de s de ma nde s de conne xion pe ut ê tre e xplicite me nt s pé cifié e via le pa ra mè tre backlog

• S i la ma chine pos s è de plus ie urs a dre s s e s , on pe ut a us s i re s tre indre l'a dre s s e s ur la que lle on a cce pte le s conne xions

• Note : ce la corre s pond à l'utilis a tion de s primitive s s ys tè me s

socket() , bind() e t listen()

(39)

veur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.ServerSocket

• Méthodes

Socket accept() a cce pte une conne xion e ntra nte

• Mé thode bloqua nte , ma is dont l'a tte nte pe ut ê tre limité e da ns le te mps pa r l'a ppe l pré a la ble de la mé thode setSoTimeout

(voir plus loin)

void close() fe rme la s ocke t

InetAddress getInetAddress() re tourne l’a dre s s e du s e rve ur

int getLocalPort() re tourne le port s ur le que l le

s e rve ur é coute

(40)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

// création d’un socket serveur sur le port port

ServerSocket serveurSocket = new ServerSocket(port);

try{

while(true){

// Attente de la connexion d’un client

Socket clientServiceSocket = serveurSocket.accept();

// et création du socket clientServiceSocket si // acceptation de la connexion

}

catch(IOException ioe) { . . . }

Classe java.net.ServerSocket

• Une ServerSocket serveur permet à des clients de

se connecter, la connexion étant ensuite gérée par une

Socket

(41)

veur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.Socket

• Cette classe est utilisée pour la programmation des sockets connectées, côté client et côté serveur

• Constructeurs

Socket(String host, int port)

• Cons truit une nouve lle s ocke t e n te nta nt une

conne xion à la ma chine hôte host s ur le port port

• Le vé e d’e xce ption :

UnknownHostException s i la ma chine hôte n’e xis te pa s

IOException s ’il n’y a pa s d’a pplica tion s e rve ur

dé ma rré e s ur le port port

(42)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.Socket

Socket(InetAddress address, int p)

• Cons truit une nouve lle s ocke t e n te nta nt une conne xion à la ma chine hôte d’a dre s s e address s ur le port p

• Le vé e d’e xce ption :

IOException s ’il n’y a pa s d’a pplica tion s e rve ur dé ma rré e s ur le port p

• De ux a utre s cons tructe urs pe rme tte nt e n outre de fixe r l'a dre s s e IP e t le numé ro de port utilis é s côté clie nt (plutôt que d'utilis e r un port dis ponible que lconque )

Socket(String host, int port, InetAddress localAddr, int localPort)

Socket(InetAddress addr, int port, InetAddress localAddr, int localPort)

• Note : tous ce s cons tructe urs corre s ponde nt à l'utilis a tion de s primitive s s ys tè me s socket() , bind() (é ve ntue lle me nt) e t connect()

bind() dé finit le port loca l

(43)

veur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.Socket

• Méthodes

void close() fe rme ture de la socket (pe ut le ve r une e xce ption IOException )

void shutDownInput() fe rme ture de la socket pour la le cture (pe ut le ve r une e xce ption IOException )

void shudownOutput() fe rme ture de la socket pour l’é criture (pe ut le ve r une e xce ption IOException )

InetAddress getLocalAddress() : a dre s s e de la ma chine hôte

InetAddress geInetAddress() : a dre s s e de la ma chine à la que lle on e s t conne cté

int getLocalPort() : le port loca l

(44)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.Socket

• La communication effective sur une connexion par socket utilise la notion de flots de données (java.io.OutputStream e t

java.io.InputStream)

• Mé thode utilis é e pour obte nir le s flots e n e ntré e (le cture )

InputStream getInputStream()

InputStream doit ê tre « ha billé » pa r :

DataInputStream

InputStreamReader

• Exe mple s

Socket socket …

DataInputStream entree = new DataInputStream(socket.getInputStream());

String chaine = entree.readUTF();

ou

BufferedReader entree =

new BufferedReader(new InputStreamReader(socket.getInputStream()) );

String chaine = entree.readLine();

(45)

veur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.Socket

• Méthode utilisée pour obtenir les flots en sortie (écriture)

OutputStream getOutputStream()

OutputStream doit ê tre « ha billé » pa r :

DataOutputStream

PrinterWriter

• Exe mple s

Socket socket …

DataOutputStream sortie =

new DataOutputStream(socket.getOutputStream());

sortie.writeUTF(chaine);

ou

PrinterWriter sortie = new PrinterWriter (socket.getOutputStream());

sortie.println(chaine);

(46)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Socket Options

TCP_NODELAY :

void setTcpNoDelay(boolean b) e t boolean getTcpNoDelay()

• vra i : implique que le s pa que ts s ont e nvoyé s s a ns dé la i

• fa ux :

• le s pe tits pa que ts s ont re groupé s a va nt d’ê tre e nvoyé s

• le s ys tè me a tte nd de re ce voir le me s s a ge d’a cquitte me nt du pa que t pré cé de nt, a va nt d’e nvoye r le pa que t s uiva nt (a lgorithme de Na gle )

SO_LINGER :

void setSoLinger(boolean b, int s) e t int getSoLinger ()

• ce pa ra mè tre indique ce qu’il fa ut fa ire de s pa que ts non e ncore e nvoyé s lors que la s ocke t e s t fe rmé e

• fa ux : la s ocke t e s t fe rmé e immé dia te me nt, e t le s pa que ts non e nvoyé s pe rdus

• vra i : la fe rme ture de la s ocke t bloque pe nda nt s s e conde s , pe nda nt

le s que lle s le s donné e s pe uve nt ê tre e nvoyé e s , e t le s a cquitte me nts

re çus

(47)

veur – Master IC2A/DCISS – Christian Bulfone

Socket Options

SO_TIMEOUT :

void setSoTimeout(int timeout) e t int getSoTimeout()

• P re nd e n pa ra mè tre le dé la i de ga rde e xprimé e n millis e conde s

• La va le ur pa r dé fa ut 0 é quiva ut à l'infini

• À l'e xpira tion du dé la i de ga rde , l'e xce ption InterruptedIOException e s t le vé e

SO_SNDBUF :

void setSendBufferSize(int s) e t int getSendBufferSize()

SO_RCVBUF :

void setReceiveBufferSize(int s) e t int getreceiveBufferSize()

• pe rme tte nt d’a jus te r la ta ille de s ta mpons pour a ugme nte r le s

pe rforma nce s ; on utilis e ra de s ta mpons plus gra nds s i :

(48)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Socket Options

SO_KEEPALIVE :

void setKeepAlive(boolean b) e t boolean getKeepAlive()

• qua nd l’option e s t mis e à vra i : s ’il n’y a pa s e u de tra ns fe rt de donné e s s ur la s ocke t de puis 2 he ure s (e n gé né ra l), TCP e nvoie un pa que t a u pa rte na ire . 3 pos s ibilité s :

• Le pa rte na ire ré pond pa r un me s s a ge d’a cquitte me nt (ACK), tout e s t OK

• Le pa rte na ire ré pond a ve c un RS T ; le pa rte na ire a e u une inte rruption, s uivi d’un re dé ma rra ge : la s ocke t e s t fe rmé e

• P a s de ré pons e du pa rte na ire : la s ocke t e s t fe rmé e

(49)

veur – Master IC2A/DCISS – Christian Bulfone

Client en mode connecté

BufferedReader entree;

try{

clientSocket = new Socket(hote, port);

entree = new BufferedReader(new InputStreamReader ( clientSocket.getInputStream () ));

while (true){

String message = entree.readLine();

System.out.println(message);

}

}catch(UnknownHostException uhe){

System.out.println("UnknownHostException");

}catch(IOException ioe){

System.out.println("IOException");

(50)

PrintWriter sortie = new printWriter (

clientSocket.getOutputStream(), true);

BufferedReader entree = new BufferedReader ( new InputStreamReader(

clientSocket.getInputStream()));

clientSocket = new Socket("prevert.upmf-grenoble.fr", 8254);

BufferedReader clavier = new BufferedReader(

new InputStreamReader(System.in));

String requete, reponse;

while (true) {

requete = clavier.readLine(); // utilisateur entre la requête sortie.println(requete); // envoyer la requête au serveur

Sur un client

Le client et le serveur peuvent maintenant communiquer Le client et le serveur sont à présent connectés

serveurSocket = new ServerSocket(8254);

clientServiceSocket = serveurSocket.accept();

PrintWriter sortie = new printWriter (

clientServiceSocket.getOutputStream(), true);

BufferedReader entree = new BufferedReader ( new InputStreamReader(

clientServiceSocket.getInputStream()));

String requete;

String reponse;

while (true) {

requete = entree.readLine();

// exécuter le service

// envoyer la réponse au client

Sur le serveur (prevert.upmf-grenoble.fr)

doit être connu

du client

Client / serveur en mode connecté (très simplifié)

(51)

serveurSocket = new ServerSocket(8254);

while (true) {

Socket clientServiceSocket = serveurSocket.accept();

Service monService = new Service(clientServiceSocket);

// crée un nouveau thread pour le nouveau client monService.start();

// lance l’exécution du thread }

public class Service extends Thread { Socket clientServiceSocket;

String requete, reponse;

public Service(Socket socket) { clientServiceSocket = socket;

}

public void run() {

PrintWriter sortie = new printWriter (

clientServiceSocket.getOutputStream(), true);

BufferedReader entree = new BufferedReader ( new InputStreamReader(

clientServiceSocket.getInputStream()));

try {

requete = entree.readLine();

// exécuter le service

// envoyer la réponse au client Programme du veilleur

Programme des exécutants

Un serveur concurrent en mode connecté

(52)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Sockets en mode non connecté

• Deux classes

DatagramSocket : un s e ul type de s ocke t

DatagramPacket : forma t de me s s a ge pour UDP

• Conve rs ion e ntre donné e s e t pa que ts (da ns le s 2 s e ns )

• Le s Da ta gra mP a cke t s ont cons truits diffé re mme nt pour l’e nvoi e t la ré ce ption

Données à envoyer (byte [])

Données à recevoir (byte [])

DatagramPacket

data packet data

packet = new DatagramPacket(data, data.length)

packet = new DatagramPacket(data, data.length, adresseIP, port)

(53)

veur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.DatagramSocket

• Cette classe permet d'envoyer et de recevoir des paquets (UDP)

• Constructeurs

DatagramSocket()

DatagramSocket(int port)

• Cons truit une s ocke t da ta gra mme e n s pé cifia nt

é ve ntue lle me nt un port s ur la ma chine loca le (pa r dé fa ut, un port dis ponible que lconque e s t chois i)

• Le vé e é ve ntue lle de SocketException

(54)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.DatagramSocket

• Emission

void send(DatagramPacket p)

• Le vé e é ve ntue lle de IOException

• Ré ce ption

void receive(DatagramPacket p)

• Ce s opé ra tions pe rme tte nt d'e nvoye r e t de re ce voir un pa que t

• Un pa que t e s t un obje t de la cla s s e

java.net.DatagramPacket qui pos s è de une zone de

donné e s e t (é ve ntue lle me nt) une a dre s s e IP e t un numé ro de port (de s tina ta ire da ns le ca s send , é me tte ur da ns le ca s

receive )

(55)

veur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.DatagramSocket

void close() : fe rme ture de la s ocke t ; pe ns e r à toujours fe rme r le s s ocke ts qui ne s ont plus utilis é e s

int getLocalPort() : re tourne le port s ur le que l on é coute , ou le port a nonyme s ur le que l on a e nvoyé le pa que t

• Il e s t pos s ible de « conne cte r » une s ocke t da ta gra mme à un de s tina ta ire

void connect(InetAddress ia, int p)

• Da ns ce ca s , le s pa que ts é mis s ur la s ocke t s e ront toujours pour l'a dre s s e s pé cifié e

• La conne xion s implifie l'e nvoi d'une s é rie de pa que ts (il n'e s t plus

né ce s s a ire de s pé cifie r l'a dre s s e de de s tina tion pour cha cun d'e ntre e ux) e t a ccé lè re le s contrôle s de s é curité (ils ont lie u une fois pour toute à la conne xion)

• La « dé conne xion » a ve c void disConnect() dé fa it l'a s s ocia tion (la

(56)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.DatagramPacket

• Emission

DatagramPacket (byte[] buf, int length, InetAddress ia, int port)

• cons truit un da ta gra mme de s tiné à ê tre e nvoyé à l’a dre s s e ia, s ur le port port

• le ta mpon buf de longue ur length contie nt le s octe ts à e nvoye r

• Ré ce ption

DatagramPacket (byte[] buf, int length)

• cons truit un da ta gra mme de s tiné à re ce voir de s donné e s

• le ta mpon buf de longue ur length contie nt le s octe ts à

re ce voir

(57)

veur – Master IC2A/DCISS – Christian Bulfone

Classe java.net.DatagramPacket

InetAddress getAddress() : re tourne l’a dre s s e de l’hôte d’où vie nt ou où va le pa que t

void setAddress(InetAddress ia) : cha nge l’a dre s s e où e nvoye r le pa que t

int getPort() : le port de l’hôte qui a e nvoyé , ou ve rs le que l on e nvoie

void setPort(int port) : cha nge le port ve rs le que l on e nvoie le pa que t

byte[] getData() : re tourne le ta ble a u conte na nt le s donné e s à e nvoye r ou re çue s

void setData(byte[] d) : cha nge le ta ble a u de s donné e s à e nvoye r

int getLength() : re tourne la ta ille du ta ble a u de s donné e s re çue s

(58)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

Exemple

try{

byte [] tampon;

tampon = . . . ;

InetAddress ia = . . .;

int port = . . .;

DatagramPacket envoiPaquet = new DatagramPacket ( tampon, tampon.length, ia, port);

DatagramSocket socket = new DatagramSocket();

socket.send(envoiPaquet);

}catch(SocketException se){

}catch(IOException ioe){

}

Pour l’envoi de datagramme

try{

byte [] tampon = new byte[];

int port = . . .;

DatagramPacket receptionPaquet = new DatagramPacket (

tampon, tampon.length);

DatagramSocket socket = new DatagramSocket(port);

socket.receive(receptionPaquet);

String s = new String (receptionPaquet.getData());

}catch(SocketException se){

}catch(IOException ioe){

Pour la réception de datagramme

(59)

DatagramSocket socket = new DatagramSocket();

byte [] envoiTampon = new byte[1024];

byte [] receptionTampon = new byte[1024];

String requete, reponse;

requete = … // dépend de l’application envoiTampon = requete.getBytes();

DatagramPacket envoiPaquet = new DatagramPacket(

envoiTampon, envoiTampon.length,

InetAddress.getbyname("prevert.upmf-grenoble.fr"), 8254);

socket.send(envoiPaquet);

DatagramPacket receptionPaquet = new DatagramPacket(

receptionTampon, receptionTampon.length);

socket.receive(receptionPaquet);

Sur un client Sur le serveur (prevert.upmf-grenoble.fr)

doit être connu du client

DatagramSocket socket = new DatagramSocket(8254);

byte [] receptionTampon = new byte[1024];

byte [] envoiTampon = new byte[1024];

String requete, reponse;

while (true) {

DatagramPacket receptionPaquet = new DatagramPacket(

receptionTampon, receptionTampon.length);

socket.receive(receptionPaquet);

requete = new String(receptionPaquet.getData());

// déterminer adresse et port du client

InetAddress clientAdresse = receptionPaquet.getAddress();

int clientPort = receptionPaquet.getPort();

// exécuter le service …

// envoyer la réponse au client

réception

requête envoi requête

Client / serveur en mode non connecté

(60)

e client-serveur – Master IC2A/DCISS – Christian Bulfone

et voilà !

Références

Documents relatifs

attention : toutes les combinaisons ne sont pas toujours possibles et toutes celles qui sont possibles n'ont pas nécessairement une implémentation disponible ... avantages

▸ DHCPNAK : Réponse du serveur pour signaler au client que son bail est expiré ou si le client annonce une mauvaise configuration réseau. ▸ DHCPDECLINE : le client annonce au

PHP langage spécialisé pour les applications web (utilisé en conjonction avec Apache) ; MySQL comme serveur de base de données. 5 Projet : réalisation

[r]

En revanche, certaines utilisations comme le continu (streaming) nécessitent l'emploi d'un protocole plus léger et plus rapide, comme UDP (User Datagram Protocol ou protocole

– Comment casser la relation forte entre client et serveur, comment rendre le client indépendant du serveur pour l'appel.

Suivant les interactions de l’utilisateur avec la page, le serveur les interprète et les transforme en requêtes SQL (………., en français langage de requête structurée). La

Il existe deux méthodes d'accès définies dans le protocole HTTP pour transmettre les données d’une page HTML d’un formulaire vers un fichier de traitement :.. ✓ La

● En bref, dans la méthode run(), on aura le code du thread (la partie statique) et on va se servir d'un objet Thread pour gérer le fil d'exécution (la partie dynamique). PR - API

● Comme pour connect, en IPv4, le deuxième argument sera souvent de type struct sockaddr_in et le troisième sera sizeof(struct sockaddr_in). ● Comme on est sur le serveur, on n'a

● Un thread partage tout le reste de l'environnement avec les autres threads qui lui sont concurrents dans le même processus. ● La JVM est multi-threadée et offre au programmeur

● protocol spécifie le procole de communication (mais pour TCP, on peut mettre 0 et le protcole est chosi de façon automatique). ● L'entier renvoyé sera le descripteur utilisé

● Comme pour connect, en IPv4, le deuxième argument sera souvent de type struct sockaddr_in et le troisième sera sizeof(struct sockaddr_in). ● Comme on est sur le serveur, on n'a

En ce qui no,us concerne, la différence la plus importante entre un client et un serveur, est que le client peut créer une Socket pour initier la communication avec une application

En tapant «http://www.google.fr», votre machine va chercher à entrer en communication avec le serveur portant le nom «www.google.fr» (en fait c'est plus compliqué,

Le poste client contient la logique fonctionnelle de base et fait appel au serveur pour effectuer les traitements en utilisant des services extérieurs. Elle

Le module de gestion des données peut être hébergé par un serveur distant (SGBD, serveur web). Le module de gestion de

• avec connexion / sans connexion (ou avec session): nécessité (/ou non) d'établir une connexion entre le client et le serveur. 11 2ème année BTS DSI Prof:EL

 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

//On associe un paquet à un buffer vide pour la réception DatagramPacket paquet =new DatagramPacket(buffer,buffer.length());. //On crée un socket pour écouter sur le

Serveur en gestion multi--clients clients en en mode connecté. mode

◮ Réponse : message transmis par un serveur à un client suite à l’exécution d’une opération, contenant le résultat

configuration du Director afin d’intégrer les données du fichier win10- fd.conf : le nom Bacula du client (win10-fd), son adresse IP, le port du service File daemon ainsi que le mot