Sie sind auf Seite 1von 46

Le mod` ele Client-Serveur

La programmation sockets

Damien Pellier
Damien.Pellier@math-info.univ-paris5.fr http://www.math-info.univ-paris5.fr/~pellier/
UFR de Math ematiques et dInformatique Universit e Descartes

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

1 / 46

Plan du cours
1 2 3 4 5 6 7 8 9 10

Fonctionnement Int er ets Exemples Acc` es ` a un service G en eralisation du mod` ele Mise en uvre du sch ema client-serveur Architecture TCP/IP Notion de port de connexion Les sockets API R eseaux de java : paquetage java.net

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

2 / 46

Rappels sur le mod` ele Client-Serveur


Le client demande lex ecution dun service Le serveur r ealise le service Client et serveur sont (en g en eral, pas n ecessairement) localis es sur deux machines distinctes Ind ependance interface-r ealisation
interface (spcication du service)

requte Client rponse Serveur

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

3 / 46

Mod` ele Client-Serveur


Fonctionnement

Communication par messages (plut ot que par partage de donn ees, m emoire ou chiers)
Requ ete : param` etres dappel, sp ecication du service requis R eponse : r esultats, indicateur eventuel dex ecution ou derreur Communication synchrone (dans le mod` ele de base) : le client est bloqu e en attente de la r eponse
requte excution service

Client

rponse

Serveur

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

4 / 46

Mod` ele Client-Serveur


Int er ets

Structuration
fonctions bien identi ees s eparation interface du service - r ealisation client et serveur peuvent etre modi es (remplac es) ind ependamment

Protection
client et serveur sex ecutent dans des domaines de protection di erents

Gestion des ressources


le serveur peut etre partag e entre de nombreux clients en contrepartie, il doit assurer la gestion des ressources partag ees

Remarque
Ces consid erations sont ind ependantes de la r epartition

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

5 / 46

Mod` ele Client-Serveur


Exemples

Exemples dapplications
Serveur de chiers (AFS, NFS) Serveur dimpression (lpd) Serveur de calcul Serveur dapplication (sp ecique ` a lapplication) Serveur de bases de donn ees Serveur de temps Serveur de noms (annuaire des services)

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

6 / 46

Acc` es ` a un service
Sch ema g en eral

Annuaire des services <description, rfrence>

3. recherche

2. enregistrement

Demandeur de service Description 5. accs Point d'accs local Rfrence 4. liaison

Fournisseur de service

1. cration Reprsentation concrte du service

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

7 / 46

G en eralisations du sch ema client-serveur (1)


Les notions de client et de serveur sont relatives
Un serveur peut faire appel ` a d !autres serveurs dont il est client Exemple usuel : traitement utilisant une base de donn ees
Serveur Fonction: applications + fonctions de services
(ex: transactions, scurit)

Client (utilisateur humain) Fonction: prsentation (interface graphique)

Base de donnes Fonction: accs aux donnes

Remarque
Ce cas sera trait e en d etail plus tard cf. Architecture ` a 3 niveaux (3-tier architecture)
Damien Pellier (UFRMI Paris 5) Le mod` ele Client-Serveur 8 / 46

G en eralisations du sch ema client-serveur (2)

Clients et serveurs jouent un r ole sym etrique


Tout site joue le r ole de serveur pour les autres Certaines fonctions (service de noms) peuvent eventuellement etre centralis ees

Syst` emes pair ` a pair (Peer to Peer, P2P)


Utilistion : partage de donn ees ` a grande echelle Initialement : partage (ill egal) de chiers (Napster, etc.)

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

9 / 46

Mise en uvre du sch ema client-serveur

Par des op erations de bas niveau


Utilisation de primitives du syst` eme de communication Exemple : sockets
Mode non connect e (UDP) Mode connect e (TCP)

Par des op erations de haut niveau


Utilisation dun middleware sp ecialis e Contexte : langage de programmation
Appel de proc edure ` a distance

Contexte : objets r epartis


Appel de m ethodes, cr eation dobjets ` a distance

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

10 / 46

Architecture TCP/IP
Messages 5. Application Flts de donnes 4. Transport Datagram 3. Rseaux Trames 2. Liaison de donnes 2. Liaison de donnes 3. Rseaux Trames 2. Liaison de donnes Datagram 3. Rseaux 4. Transport 5. Application

1. Physique

1. Physique

Internet LAN 1 LAN 2

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

11 / 46

TCP : Transmission Control Protocol

Transmission avec connexion (type t el ephone)


Cr eation dun circuit virtuel entre source et destination Mode point ` a point

Gestion du s equencement i.e., ordonnancement des messages Gestion des ux an d eviter lenvoi de paquets irrecevables par le destinataire (ex : gestion des buers au niveau r ecepteur et emetteur) Liaison full-duplex (virtuellement) Orient e ux de donn ees

Important :
Connexion able de bout en bout mais lente

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

12 / 46

UDP : User Datagram Protocol

Transmission sans connexion (mod` ele postal) Pas de contr ole de s equencement
Lordre darriv ee des messages peu etre di erent de lordre denvoi.

Pas de garantie darriv ee des messages


Mais les donn ees re cues sont garanties non corrompues

Important :
Non able mais rapide

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

13 / 46

Notion de port de connexion


Un port de connexion nest pas un port physique comme les ports s eries ou parall` eles, ce sont des ports logiques Un port de connexion est un nombre sur 16 bits
65536 possibilit es Ports r eserv es en standard pour les applications syst` eme : 0 ` a 1023 http://www.iana.org/assignments/port-numbers, RFC 1700

Permet davoir sur une m eme machine plusieurs services accessibles simultan ement (web, email, ftp, etc.) Adressage r ealis e en sappuyant sur le couple @machine , port . Par exemple :
@machine , 80 HTTP @machine , 20/21 FTP @machine , 23 TELNET

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

14 / 46

Plage de ports de connexion

0 Ports rservs 1024


Plage de ports

Le port 0 est un port r eserv e sp ecial Certaines applications r eservent des ports en zone utilisteurs ex : X11 se r eserve le port 6000
Ports utilisateurs

Ports dclars mais utilisables 49151 Ports libres

65536

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

15 / 46

Exemple de ports de connexion


Machine A
http ftp telnet smtp https Application ddie dns chargen 80 20/21 23 25 443 3435 53 19

Machine B
1345

Machine C

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

16 / 46

Les sockets

Les sockets d enissent une interface entre les programmes dapplications et les couches r eseaux. Le terme de socket (embout) d esigne aussi un canal de communication par lequel un processus peut envoyer ou recevoir des donn ees LAPI (Application Program Interface) socket de JAVA est proche de lAPI chier UNIX :
Primitives douverture/fermeture, lecture/ ecriture, de contr ole

Histoire
1982 : BSD impl emente une interface Socket 1992 : Winsock de Trumpet pour windows

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

17 / 46

API R eseau de Java : paquetage java.net


Niveau application (couche 5, 6, 7 OSI)
classe URL classe URLConnection classe HttpURLConnection etc.

Adresse IP
classe InetAddress

Socket TCP
classe Socket, classe SocketServer

Socket UDP
classe DatagramSocket, class DatagramPacket

Multicast
classe MulticastSocket

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

18 / 46

Classe java.net.InetAddress

Repr esente une adresse IP


Utilis e par les classes Socket et DatagramSocket Les m ethodes importantes (attention se sont des m ethodes static) de la class InetAddress sont :
public static InetAddress getByName(String Host) public static InetAddress[] getAllByName(String host), public static InetAddress getLocalHost(), etc.

Exception : UnknownHostException, IOException

Sous classe :
Inet4address, Inet6Address

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

19 / 46

Exemple : classe java.net.InetAddress

Exemple
InetAddress adresse = n u l l ; tr y { i f ( args . length > 0 ) { // Appel ` a l a m ethode s t a t i c getByName() adresse = InetAddress . getByName ( args [ 0 ] ) ; } else { // Appel ` a l a m ethode s t a t i c getLocalHost () adresse = InetAddress . getLocalHost ( ) ;
}

System . out . p r i n t l n ( adresse . toString ( ) ) ; } catch ( UnknownHostException uhe ) { System . e r r . p r i n t l n ( Adresse inconnue ) ; }

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

20 / 46

Socket UDP

Mode non connect e Non able et r eception non ordonn ee Principe


Pas de circuit virtuel d eni ` a lavance envoi de ladresse destinataire Lenvoyeur envoie un datagramme sur un socket que le receveur ecoute

Classes n ecessaires ` a la mise en uvre :


java.net.DatagramSocket qui repr esente le socket local ou distant en mode non connect e java.net.DatagramPacket qui repr esente le datagramme ` a envoyer ou re cu (tableau doctets)

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

21 / 46

Socket UDP c ot e emetteur

Cr eation dun socket


DatagramSocket dgSocket = new DatagramSocket() ;

Pr eparation des donn ees ` a emettre


byte[] data = new byte[15] ; // ` a remplir ! data = {H, E, L, L, O, \r, \n} ; DatagramPacket paquet = new DatagramPacket(data, data.length, IPDestination, port) ;

Envoi des donn ees


dgSocket.send(paquet) ;

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

22 / 46

Socket UDP c ot e r ecepteur


Cr eation dun socket li e au port d ecoute
DatagramSocket dgSocket = new DatagramSocket(port) ;

Pr eparation du paquet de r eception


DatagramPacket data = new byte[MAX] ; // initialement vide DatagramPacket paquet = new DatagramPacket(data, data.lenght) ;

R eception du paquet
dgSocket.receive(paquet) ; // attention bloquant

Remarques
Lordre de r eception des paquets peut etre di erent de celui d emission Pour r ealiser un receive non bloquant (communication asynchrone) il est n ecessaire dutiliser la classe java.net.DatagramChannel.

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

23 / 46

Exemple : code client UDP

Exemple
import java . net . ; import java . i o . ; public c l a s s UDPClientEcho { public s t a t i c void main ( String [ ] args ) { tr y { InetAddress adrServ = InetAddress . getByName ( args [ 0 ] ) ; i n t portServ = I n t e g e r . p a r s e I n t ( args [ 1 ] ) ; // Connexion avec l e c l a v i e r DataInputStream c i n = new DataInputStream ( System . i n ) ; // Cr e ation du socket UDP DatagramSocket dgSocket = new DatagramSocket ( ) ; boolean stop = f a l s e ; while ( ! stop ) { System . out . p r i n t ( Entrer une phrase : ) ; String l i g n e = c i n . readLine ( ) ; // l e c t u r e c l a v i e r

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

24 / 46

Exemple : code client UDP


Exemple (suite)
i f ( l i g n e . equals ( . ) ) { // Si f i n i , a l o r s s o r t i r stop = true ; } e l s e { // sinon pr e parer et envoyer paquet byte [ ] data = l i g n e . getBytes ( ) ; DatagramPacket paquet = new DatagramPacket ( data , l i g n e . length ( ) , adrServ , portServ ) ; dgSocket . send ( paquet ) ; // Envoi du paquet dgSocket . r e c e i v e ( paquet ) ; // Attente de l e cho System . out . p r i n t l n ( Echo : + new String ( paquet . getData ( ) ) ) ;
} } } catch ( IOException i o e ) { System . e r r . p r i n t l n ( i o e ) ; } } }

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

25 / 46

Exemple : code Serveur UDP

Exemple
import java . net . ; import java . i o . ; public c l a s s UDPServeurEcho { // Longueur max des paquets en r e ception f i n a l s t a t i c i n t LG MAX = 1 0 2 4 ; // Buffer de r e ception f i n a l s t a t i c byte [ ] b u f f e r = new byte [ LG MAX ] ; public s t a t i c void i n t portServ = tr y { // Cr e ation du DatagramSocket main ( String [ ] args ) { I n t e g e r . p a r s e I n t ( args [ 0 ] ) ; socket d e coute dgSocket = new DatagramSocket ( portServ ) ;

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

26 / 46

Exemple : code Serveur UDP


Exemple (Suite)
// Pr e paration du paquet de r e ception DatagramPacket paquet = new DatagramPacket ( buffer , b u f f e r . length ) ; System . out . p r i n t l n ( Attente bloquante en r e ception ) ; while ( true ) { // Attente bloquante en r e ception dgSocket . r e c e i v e ( paquet ) ; // Cr e ation du paquet d e cho paquet = new DatagramPacket ( paquet . getData ( ) , paquet . getLength ( ) , paquet . getAddress ( ) , paquet . getPort ( ) ) ; dgSocket . send ( paquet ) ; // Envoi du paquet
} } catch ( IOException i o e ) { System . e r r . p r i n t l n ( i o e ) ; } } }

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

27 / 46

Socket TCP

Mode connect e L etablissement de la connexion est asym etrique


Une machine est client : classe java.net.Socket
Demandeur dun service Demande l etablissement dune connexion avec le serveur

Une machine est serveur : classe java.net.ServerSocket


Prestataire dun service Attend les demandes de connexion et les accepte

Deux ots de donn ees etablis entre les deux machines


circuit virtuel

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

28 / 46

Etape de connexion avec TCP

Client

Serveur Cration ServeurSocket liaison avec le port TCP Attente d'une demande de connexion

1 2 Cration Socket et demande de connexion 1

Ouverture client OK Ouverture serveur OK

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

29 / 46

Socket TCP Connexion


Connexion c ot e client est r ealis ee en
1 2

demandant une connexion au serveur cr eant deux canaux de communication

socket = new Socket(adresseServeur, portService) ;

Connexion c ot e serveur est r ealis ee en


1 2 3

attendant une demande connexion sur le socket d ecoute acceptant la demande de connexion Les transferts peuvent dor enavant etre eectu es en utilisant le socket de transfert

listenSocket = new SocketServer(portService) ; transferSocket = accept() ;

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

30 / 46

Socket TCP : Echange de donn ees

R ecup eration des canaux dentr ee et de sortie

InputStream sin = socket.getInputStream() ; OutputStream sout = socket.getOutputStream() ;


2

Choix dun type dentr ee sortie particulier

Exemple
DataInputStream sin = new DataInpuStream(socket.getInputStream()) ; DataOutputStream sout = new DataOutputStream(socket.getOutputStream()) ;

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

31 / 46

Socket TCP : Echange de donn ees (suite)


1

exemple de transfert de donn ee de taille statique

Exemple : transfert dun entier (4 octets)


sout.writeInt(1) ; // c^ ot e emetteur int entier = sin.readInt() ; // c^ ot e r ecepteur
2

exemple de transfert de donn ee de taille dynamique

Exemple : transfert dune cha ne


// c^ ot e emetteur String str = J ecris dans le tyuau ; // cha^ ne ` a envoyer byte[] bytes = str.getBytes() ; // conversion de la cha^ ne en un tableau doctets sout.writeInt(bytes.length) ; // envoi de la taille sout.write(b) ; // envoi de la cha^ ne // c^ ot e r ecepteur int taille = sin.readInt() ; // lecture de la taille byte[] bytes = new byte[taille] ; // tableau doctets pour contenir la cha^ ne sin.read(bytes) ; // lecture de la cha^ ne String str = new String(bytes) ; // conversion du tableau doctets en cha^ ne

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

32 / 46

Socket TCP : Echange de donn ees (suite)


1

Choix de lencodage des carat` eres

Exemple dencodage UTF-16


String str = J ecris dans le tyuau ; // cha^ ne ` a envoyer byte[] bytes = str.getBytes(UTF-16) ; // conversion de str au format UTF-16

Format : disponibles : US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16.


2

Java ore une m ethode simple pour transf erer des chaines au format UTF-8.

Exemple : transfert dune cha ne UTF-8


// c^ ot e emetteur String str = J ecris dans le tyuau ; // cha^ ne ` a envoyer sout.writeUTF(str) ; // envoi de la cha^ ne // c^ ot e r ecepteur String str = sin.readUTF() ; // lecture de la cha^ ne

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

33 / 46

Exemple : code client TCP

Exemple
import java . net . ; import java . i o . ; public c l a s s TCPClientEcho { public s t a t i c void main ( String [ ] args ) { String adrServ = args [ 0 ] ; i n t portServ = I n t e g e r . p a r s e I n t ( args [ 1 ] ) ; // Connexion avec l e c l a v i e r BufferedReader c i n = new BufferedReader ( new InputStreamReader ( System . i n ) ) ; tr y { // Ouverture socket et demande de connexion Socket socket = new Socket ( adrServ , portServ ) ; // Connexion au canal de r e ception DataInputStream s i n = new DataInputStream ( socket . getInputStream ( ) ) ;

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

34 / 46

Exemple : code client TCP

Exemple (suite)
// Connexion au canal d e mission DataOutputStream sout = new DataOutputStream ( socket . getOutputStream ( ) ) ; boolean stop = f a l s e ; while ( ! stop ) { // S a i s i e c l a v i e r bloquante System . out . p r i n t ( Entrer une phrase : ) ; String l i g n e = c i n . readLine ( ) ; i f ( l i g n e . equalsIgnoreCase ( FIN ) ) { stop = true ; // s i f i n i a l o r s s o r t i r sout . writeUTF ( FIN ) ; // envoi FIN au serveur

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

35 / 46

Exemple : code client TCP

Exemple (suite)
} e l s e { // Sinon , envoi des donn e es au serveur sout . writeUTF ( l i g n e ) ;

// Lecture du canal de r e ception et a f f i c h a g e System . out . p r i n t l n ( Echo : + s i n . readUTF ( ) ) ;


} } } catch ( UnknownHostException uhe ) { System . e r r . p r i n t l n ( uhe ) ; } catch ( IOException i o e ) { System . e r r . p r i n t l n ( i o e ) ; } } }

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

36 / 46

Les types de serveurs


On peut classer les serveurs en deux types distincts : 1 Les serveurs it eratifs : les requ etes sont trait ees les unes apr` es les autres par un seul Thread.
2

Les serveurs concurrents : les di erentes requ etes sont trait ees de mani` ere concurrentes, chacune n ecessitant la cr eation dun Thread d edi e` a son traitement.

Avantages
Les serveurs it eratifs sont plus simples ` a mettre en uvre : il nest pas n ecessaire de synchroniser lex ecution concurrente des di erents Thread.

Inconv enients
Les temps de r eponses des serveurs it eratifs sont plus importants : un seul client trait e` a la fois.

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

37 / 46

Le serveur it eratif
Client
Initialisation

Serveur Itratif
Initialisation

Demande de connexion

coute des connexions


File d'attente des connexions

Envoi de requtes

Rception rponse

Traitement des requtes en utilisant le socket de transfert

fermeture socket

fermeture socket de transfert

Fin

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

38 / 46

Exemple : code serveur TCP

Exemple
import java . net . ; import java . i o . ; public c l a s s TCPServeurEcho { public s t a t i c void main ( String [ ] args ) { i n t portServ = I n t e g e r . p a r s e I n t ( args [ 0 ] ) ; ServerSocket l i s t e n S o c k e t = n u l l ; tr y { // Cr e ation d une connexion p a s s i v e l i s t e n S o c k e t = new ServerSocket ( portServ ) ;

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

39 / 46

Exemple : code serveur TCP

Exemple (suite)
// Attente de connexion c l i e n t while ( true ) { // Acceptation des connexions c l i e n t System . out . p r i n t l n ( Attente connexions . . . ) ; Socket transferSocket = l i s t e n S o c k e t . accept ( ) ; // R e a l i s e l e s e r v i c e pour chaque c l i e n t // Acc` e s s e q u e n t i e l (un c l i e n t s e r v i ` a la fois ) doService ( transferSocket ) ;
} } catch ( IOException i o e ) { System . e r r . p r i n t l n ( i o e ) ; }

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

40 / 46

Exemple : code serveur TCP

Exemple (suite)
private s t a t i c void doService ( Socket socket ) throws IOException { // Connexion au f l u x en l e c t u r e DataInputStream s i n = new DataInputStream ( socket . getInputStream ( ) ) ; // Connexion au f l u x en ecriture DataOutputStream sout = new DataOutputStream ( socket . getOutputStream ( ) ) ;

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

41 / 46

Exemple : code serveur TCP

Exemple (suite)
// Renvoi des donn e es re c ues ( readLine e s t bloquant ) boolean stop = f a l s e ; while ( ! stop ) { String msg = s i n . readUTF ( ) ; i f ( msg . equals ( FIN ) ) { stop = true ; } else { sout . writeUTF ( msg ) ; // Envoi echo
} } }

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

42 / 46

Le serveur concurrent
Client
Initialisation

Serveur Concurrent
Initialisation

Demande de connexion

coute des connexions


File d'attente des connexions

Cration d'un thread ddi Envoi de requtes thread p1

thread p0

Rception rponse

Traitement des requtes en utilisant le socket de transfert

fermeture socket

fermeture socket de transfert

Fin traitement Fin

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

43 / 46

Exemple : boucle principale du serveur TCP concurrent


Exemple
tr y { // Cr e ation d une connexion p a s s i v e l i s t e n S o c k e t = new ServerSocket ( portServ ) ; // Attente de connexion c l i e n t System . out . p r i n t l n ( Attente connexion . . . . ) ; while ( true ) { // Acceptation des connexions c l i e n t Socket transferSocket = l i s t e n S o c k e t . accept ( ) ; // R e a l i s e l e s e r v i c e pour chaque c l i e n t // Acc` e s concurrent Servic e s e r v i c e = new Servic e ( transferSocket ) ; service . start ( ) ;
} } catch ( IOException i o e ) { System . e r r . p r i n t l n ( i o e ) ; }

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

44 / 46

Exemple : code de traitement


Exemple
import java . lang . ; import java . net . ; import java . i o . ; public c l a s s Servic e extends Thread { private Socket socket ; // La socket c l i e n t public Service ( Socket socket ) { // Construteur du s e r v i c e t h i s . socket = socket ;
}

public void run ( ) { // M ethode impl e mentant l e s e r v i c e tr y { // Connexion au f l u x en l e c t u r e DataInputStream s i n = new DataInputStream ( t h i s . socket . getInputStream ( ) ) ; // Connexion au f l u x en ecriture DataOutputStream sout = new DataOutputStream ( t h i s . socket . getOutputStream ( ) ) ;

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

45 / 46

Exemple : code de traitement (suite)

Exemple
// Renvoi des donn e es re c ues ( readLine e s t bloquant ) boolean stop = f a l s e ; while ( ! stop ) { String msg = s i n . readUTF ( ) ; i f ( msg . equals ( FIN ) ) { stop = true ; } else { sout . writeUTF ( msg ) ; // Envoi echo
} } } catch ( IOException e ) { System . e r r . p r i n t l n ( e ) ; } } }

Damien Pellier (UFRMI Paris 5)

Le mod` ele Client-Serveur

46 / 46

Das könnte Ihnen auch gefallen