You are on page 1of 48

Systmes distribus Sockets TCP/UDP et leur mise en uvre en Java

Eric Cariou
Universit de Pau et des Pays de l'Adour Dpartement Informatique Eric.Cariou@univ-pau.fr
1

Rappel sur les rseau

TCP ou UDP
Communication entre systmes aux extrmits Pas de visi i!it des systmes intermdiaires
Application TCP/UDP IP Liaison Physique IP Liaison Physique
2

Application TCP/UDP IP Liaison Physique

Communication dextrmit extrmit

#dressa$e pour communication entre app!ications


#dresse % rseau & app!ication ' coup!e de 2 informations

!dressa"e

#dresse (P et numro de port Ex * 1+2.12+.12.", Ce numro est en entier d-une va!eur .ue!con.ue

Couc)e rseau * adresse (P

Couc)e transport * numro de port TCP ou UDP

Ports / 102, * rservs pour !es app!ications ou protoco!es systmes Exemp!e * 10 ' 2TTP3 21 ' 4TP3 ...

5ur un port * rception ou envoi de donnes

#dresse note * @IP:port ou nomMachine:port

1+2.12+.12.",*10 * accs au serveur 6e tournant sur !a mac)ine d-adresse (P 1+2.12+.12.", "

5oc7et * prise

Sockets

#ssocie3 !ie 8 un port


C-est donc un point d-accs aux couc)es rseaux

5ervices d-mission et de rception de donnes sur !a soc7et via !e port En mode connect 9TCP:

Connexion ' tuyau entre 2 app!ications distantes Une soc7et est un des deux outs du tuyau C)a.ue app!ication a une soc7et !oca!e pour $rer !a communication 8 distance 5ur un port prcis 8 !a demande du pro$ramme 5ur un port .ue!con.ue !i re dtermin par !e systme ,

Une soc7et peut-;tre !ie


Sockets

Une soc7et est


Un point d-accs aux couc)es rseau TCP=UDP >ie !oca!ement 8 un port

#dressa$e de !-app!ication sur !e rseau * son coup!e @(P*port

E!!e permet !a communication avec un port distant sur une mac)ine distante * c-est-8-dire avec une app!ication distante <

(! y a tou@ours diffrenciation entre une partie c!ient et une partie serveur


Deux rA!es distincts au niveau de !a communication via TCP=UDP Bais possi i!it .ue !es !ments communi.uant @ouent un autre rA!e ou !es 2 en m;me temps (dentification * on doit connaCtre prcisment !a !oca!isation d-un des 2 !ments communi.uants

Client/serveur avec sockets

Diffrenciation pour p!usieurs raisons

>e cot serveur communi.ue via une soc7et !ie 8 un port prcis * port d-coute >e c!ient initie !a connexion ou !a communication ?

Dissymtrie de !a communication=connexion

Sockets UDP

Bode data$ramme

Sockets UDP # principe

Envois de pa.uets de donnes 9data$rammes: Pas de connexion entre parties c!ient et serveur Pas de fia i!it ou de $estion de !a communication

Un pa.uet peut ne pas arriv 9perdu par !e rseau: Un pa.uet P2 envoy aprs un pa.uet P1 peut arriver avant ce pa.uet P1 9se!on !a $estion des routes dans !e rseau:

Principe de communication
>a partie serveur cre une soc7et et !a !ie 8 un port UDP particu!ier >a partie c!ient cre une soc7et pour accder 8 !a couc)e UDP et !a !ie sur un port .ue!con.ue
1

Principe de communication 9suite:

Sockets UDP # principe

>e serveur se met en attente de rception de pa.uet sur sa soc7et >e c!ient envoie un pa.uet via sa soc7et en prcisant !-adresse du destinataire

Coup!e @(P=port Destinataire ' partie serveur

@(P de !a mac)ine sur !a.ue!!e tourne !a partie serveur et numro de port sur !e.ue! est !ie !a soc7et de !a partie serveur

(! est reEu par !e serveur 9sauf p rseau:

5i !e c!ient envoie un pa.uet avant .ue !e serveur ne soit pr;t 8 recevoir * !e pa.uet est perdu
+

Sockets UDP en Java

Fava int$re nativement !es fonctionna!its de communication rseau au dessus de TCP-UDP=(P


Pac7a$e java.net InetAddress * coda$e des adresses (P DatagramSocket * soc7et mode non connect 9UDP: DatagramPacket * pa.uet de donnes envoy via une soc7et sans connexion 9UDP:

C!asses uti!ises pour communication via UDP

10

C!asse InetAddress
Constructeurs

Sockets UDP en Java

Pas de constructeurs3 on passe par des mt)odes stati.ues pour crer un o @et
public static InetAddress getByName(String host) throws UnknownHostE ception

Bt)odes

Cre un o @et InetAddress identifiant une mac)ine dont !e nom est pass en paramtre >-exception est !eve si !e service de nom 9DG5...: du systme ne trouve pas de mac)ine du nom pass en paramtre sur !e rseau 5i prcise une adresse (P sous forme de c)aCne 9--1+2.12.2".2,--: au !ieu de son nom3 !e service de nom n-est pas uti!is Une autre mt)ode permet de prciser !-adresse (P sous forme d-un ta !eau de , octets

11

Sockets UDP en Java

C!asse InetAddress
Bt)odes 9suite:

public static InetAddress get!ocalHost() throws UnknownHostE ception

Hetourne !-adresse (P de !a mac)ine sur !a.ue!!e tourne !e pro$ramme3 c-est-8-dire !-adresse (P !oca!e Hetourne !e nom de !a mac)ine dont !-adresse est code par !-o @et (net#ddress

public String getHostName()

12

Sockets UDP en Java

C!asse "atagram#acket
5tructure des donnes en mode data$ramme Constructeurs

public "atagram#acket(byte$% bu&' int length)


Cration d-un pa.uet pour recevoir des donnes 9sous forme d-un ta !eau d-octets: >es donnes reEues seront p!aces dans bu& length prcise !a tai!!e max de donnes 8 !ire

Ge pas prciser une tai!!e p!us $rande .ue ce!!e du ta !eau En $nra!3 length ' tai!!e de bu&

Iariante du constructeur * avec un offset pour ne pas commencer au d ut du ta !eau

1"

Sockets UDP en Java

C!asse "atagram#acket
Constructeurs 9suite:

public "atagram#acket(byte$% bu&' int length' InetAddress address' int port)


Cration d-un pa.uet pour envoyer des donnes 9sous forme d-un ta !eau d-octets: bu& * contient !es donnes 8 envoyer length * !on$ueur des donnes 8 envoyer

Ge pas prciser une tai!!e suprieure 8 ce!!e de bu&

address * adresse (P de !a mac)ine destinataire des donnes port * numro de port distant 9sur !a mac)ine destinataire: oJ envoyer !es donnes

1,

C!asse "atagram#acket
Bt)odes % $et &

Sockets UDP en Java

InetAddress getAddress()

5i pa.uet 8 envoyer * adresse de !a mac)ine destinataire 5i pa.uet reEu * adresse de !a mac)ine .ui a envoy !e pa.uet 5i pa.uet 8 envoyer * port destinataire sur !a mac)ine distante 5i pa.uet reEu * port uti!is par !e pro$ramme distant pour envoyer !e pa.uet Donnes contenues dans !e pa.uet 5i pa.uet 8 envoyer * !on$ueur des donnes 8 envoyer 5i pa.uet reEu * !on$ueur des donnes reEues

int get#ort()

byte$% get"ata

int get!ength()

1<

Sockets UDP en Java

C!asse "atagram#acket
Bt)odes % set &

(oid setAddress(InetAdress adr)

Positionne !-adresse (P de !a mac)ine destinataire du pa.uet Positionne !e port destinataire du pa.uet pour !a mac)ine distante Positionne !es donnes 8 envoyer Positionne !a !on$ueur des donnes 8 envoyer

(oid set#ort(int port)

(oid set"ata(byte$% data)

int set!ength(int length)

1?

C!asse "atagram#acket3 comp!ment sur !es tai!!es des donnes envoyes


Fava n-impose aucune !imite en tai!!e pour !es ta !eaux d-octets circu!ant dans !es pa.uets UDP3 mais

Sockets UDP en Java

Pour tenir dans un seu! data$ramme (P3 !e data$ramme UDP ne doit pas contenir p!us de ?<,?D octets de donnes

Un data$ramme UDP est rarement envoy via p!usieurs data$rammes (P Car !a p!upart des systmes !imitent 8 1 Ko !a tai!!e des data$rammes UDP

Bais en prati.ue * i! est consei!! de ne pas dpasser 11D? octets

Pour ;tre certain de ne pas perdre de donnes * <12 octets max 5i data$ramme UDP trop $rand * !es donnes sont tron.ues

5i ta !eau d-octets en rception est p!us petit .ue !es donnes envoyes

>es donnes reEues sont $nra!ement tron.ues 1D

Sockets UDP en Java

C!asse "atagramSocket
5oc7et en mode data$ramme Constructeurs

public "atagramSocket() throws SocketE ception


Cre une nouve!!e soc7et en !a !iant 8 un port .ue!con.ue !i re Exception !eve en cas de pro !me 9a priori i! doit pas y en avoir:

public "atagramSocket(int port) throws SocketE ception


Cre une nouve!!e soc7et en !a !iant au port !oca! prcis par !e paramtre port Exception !eve en cas de pro !me * notamment .uand !e port est d@8 occup

11

C!asse "atagramSocket

Sockets UDP en Java

Bt)odes d-mission=rception de pa.uet


public (oid send("atagram#acket p) throws I)E ception

Envoie !e pa.uet pass en paramtre. >e destinataire est identifi par !e coup!e @(P=port prcis dans !e pa.uet Exception !eve en cas de pro !me d-entre=sortie

public (oid recei(e("atagram#acket p) throws I)E ception


HeEoit un pa.uet de donnes L!o.uant tant .u-un pa.uet n-est pas reEu Muand pa.uet arrive3 !es attri uts de p sont modifis >es donnes reEues sont copies dans !e ta !eau pass en paramtre !ors de !a cration de p et sa !on$ueur est positionne avec !a tai!!e des donnes reEues >es attri uts d-@(P et de port de p contiennent !-@(P et !e port de !a soc7et distante .ui a mis !e pa.uet

1+

C!asse "atagramSocket
#utres mt)odes

Sockets UDP en Java

public (oid close()

4erme !a soc7et et !i re !e port 8 !a.ue!!e e!!e tait !ie Hetourne !e port !oca! sur !e.ue! est !ie !a soc7et

public int get!ocal#ort()

Possi i!it de crer un cana! 9mais tou@ours en mode non connect:


Pour restreindre !a communication avec un seu! destinataire distant Car par dfaut peut recevoir sur !a soc7et des pa.uets venant de n-importe oJ 20

C!asse "atagramSocket

Sockets UDP en Java

Hception de donnes * via mt)ode recei(e


Bt)ode !o.uante sans contrainte de temps * peut rester en attente indfiniment si aucun pa.uet n-est @amais reEu public (oid setSo*imeout(int timeout) throws SocketE ception >-appe! de !a mt)ode recei(e sera !o.uante pendant au p!us timeout mi!!isecondes Une mt)ode recei(e se terminera a!ors de 2 faEons

Possi i!it de prciser un d!ai maximum d-attente


E!!e retourne norma!ement si un pa.uet est reEu en moins du temps positionn par !-appe! de setSo*imeout >-exception Socket*imeoutE ception est !eve pour indi.uer .ue !e d!ai s-est cou! avant .u-un pa.uet ne soit reEu Socket*imeoutE ception est une sous-c!asse de I)E ception

21

Sockets UDP Java $ e emple cot client


InetAddress adr; DatagramPacket packet; DatagramSocket socket; == adr contient !-@(P de !a partie serveur adr = InetAddress.getByName("scinfr222"); == donnes 8 envoyer * c)aCne de caractres byte[] data = (new String("youpi")).getBytes();

== cration du pa.uet avec !es donnes et en prcisant !-adresse du serveur == 9@(P et port sur !e.ue! i! coute * DDDD: packet = new DatagramPacket(data, data.length, adr, 7777); == cration d-une soc7et3 sans !a !ier 8 un port particu!ier socket = new DatagramSocket(); == envoi du pa.uet via !a soc7et socket.send(packet);

22

Sockets UDP Java $ e emple cot serveur

DatagramSocket socket; DatagramPacket packet; == cration d-une soc7et !ie au port DDDD DatagramSocket socket = new DatagramSocket(7777); == ta !eau de 1< octets .ui contiendra !es donnes reEues byte[] data = new byte[15]; == cration d-un pa.uet en uti!isant !e ta !eau d-octets packet = new DatagramPacket(data, data.length); == attente de !a rception d-un pa.uet. >e pa.uet reEu est p!ac dans == pac7et et ses donnes dans data. socket.receive(packet); == rcupration et affic)a$e des donnes 9une c)aCne de caractres: String chaine = new String(packet.getData(), 0, packet.getLength()); System.out.println(" recu : "+chaine);

2"

Sockets UDP en Java $ e emple suite

>a communication se fait souvent dans !es 2 sens


>e serveur doit donc connaCtre !a !oca!isation du c!ient E!!e est prcise dans !e pa.uet .u-i! reEoit du c!ient
System.out.println(" ca vient de : "+packet.getAddress()+":"+ packet.getPort()); == on met une nouve!!e donne dans !e pa.uet == 9.ui contient donc !e coup!e @(P=port de !a soc7et cot c!ient:
packet.setData((new String("bien recu")).getBytes());

Hponse au c!ient3 cot serveur

== on envoie !e pa.uet au c!ient socket.send(packet); 2,

Sockets UDP en Java $ e emple suite

Hception rponse du serveur3 cot c!ient


== attente pa.uet envoy sur !a soc7et du c!ient socket.receive(packet); == rcupration et affic)a$e de !a donne contenue dans !e pa.uet String chaine = new String(packet.getData(), 0, packet.getLength()); System.out.println(" recu du serveur : "+chaine);

2<

Criti%ue sockets UDP

#vanta$es
5imp!e 8 pro$rammer 9et 8 appr)ender: Pas fia !e Ge permet d-envoyer .ue des ta !eaux de yte

(nconvnients

2?

Structure des donnes c&an"es

4ormat des donnes 8 transmettre


Trs !imit a priori * ta !eaux de yte

Et attention 8 !a tai!!e rserve * si !e rcepteur rserve un ta !eau trop petit par rapport 8 ce!ui envoy3 une partie des donnes est perdue Un o @et .ue!con.ue en yteNO pour !-envoyer Un yteNO en un o @et d-un certain type aprs rception Crer !es mt)odes .ui font ce!a * !ourd et domma$e de faire des tPc)es de si % as-niveau & avec un !an$a$e vo!u comme Fava Uti!iser !es f!ux Fava pour conversion automati.ue 2D

Doit donc pouvoir convertir


Deux so!utions

Conversion 'b(ect )*+ byte,

Pour mettre et recevoir n-importe .ue! o @et via des soc7ets UDP
En criture * conversion de Q @ect en yteNO
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); ObjectOutputStream objectStream = new ObjectOutputStream(byteStream); objectStream.writeObject(object); byte[] byteArray = byteStream.toByteArray();

En !ecture * conversion de yteNO en Q @ect


ByteArrayInputStream byteStream = new ByteArrayInputStream(byteArray); ObjectInputStream objectStream = new ObjectInputStream(byteStream); object = objectStream.readObject(); 21

Sockets TCP

2+

4onctionnement en mode connect

Sockets TCP # principe

Donnes envoyes dans un % tuyau & et non pas par pa.uet


4!ux de donnes Correspond aux f!ux Fava dans !a mise en oeuvre Fava des soc7ets TCP >es donnes envoyes sont toutes reEues par !a mac)ine destinataire >es donnes sont reEues dans !-ordre oJ e!!es ont t envoyes

4ia !e * !a couc)e TCP assure .ue


"0

Principe de communication

Sockets TCP # principe

>e serveur !ie une soc7et d-coute sur un certain port ien prcis et appe!!e un service d-attente de connexion de !a part d-un c!ient >e c!ient appe!!e un service pour ouvrir une connexion avec !e serveur

(! rcupre une soc7et 9associe 8 un port .ue!con.ue par !e systme:

Du cot du serveur3 !e service d-attente de connexion retourne une soc7et de service 9associe 8 un port .ue!con.ue:

C-est !a soc7et .ui permet de dia!o$uer avec ce c!ient

Comme avec soc7ets UDP * !e c!ient et !e serveur communi.uent en envoyant et recevant des donnes via !eur soc7et "1

Sockets TCP en Java

C!asses du pac7a$e +a(a,net uti!ises pour communication via TCP


InetAddress * coda$e des adresses (P

B;me c!asse .ue ce!!e dcrite dans !a partie UDP et usa$e identi.ue

Socket * soc7et mode connect ServerSocket * soc7et d-attente de connexion du cot server

"2

Sockets TCP en Java

C!asse 5oc7et
5oc7et mode connect Constructeurs

public Socket(InetAddress address, int port) throws IOException

Cre une soc7et !oca!e et !a connecte 8 un port distant d-une mac)ine distante identifi par !e coup!e address/port

public Socket(String address, int port) throws IOException,UnknownHostException


(dem mais avec nom de !a mac)ine au !ieu de son adresse (P code >ve !-exception UnknownHostException si !e service de nom ne parvient pas 8 identifier !a mac)ine

Iariante de ces 2 constructeurs pour prciser en p!us un port !oca! sur !e.ue! sera !ie !a soc7et cre ""

C!asse 5oc7et

Sockets TCP en Java

Bt)odes d-mission=rception de donnes


Contrairement aux soc7ets UDP3 !es soc7ets TCP n-offre pas directement de services pour mettre=recevoir des donnes Qn rcupre !es f!ux d-entre=sorties associs 8 !a soc7et

OutputStream getOutputStream()

Hetourne !e f!ux de sortie permettant d-envoyer des donnes via !a soc7et Hetourne !e f!ux d-entre permettant de recevoir des donnes via !a soc7et

InputStream getInputStream()

4ermeture d-une soc7et

public close()

4erme !a soc7et et rompt !a connexion avec !a mac)ine distante

",

C!asse 5oc7et

Sockets TCP en Java

Bt)odes % $et &


int getPort()

Henvoie !e port distant avec !e.ue! est connect !a soc7et Henvoie !-adresse (P de !a mac)ine distante Henvoie !e port !oca! sur !e.ue! est !ie !a soc7et

InetAddress getAddress()

int getLocalPort()

public void setSoTimeout(int timeout) throws SocketException

Positionne !-attente maxima!e en rception de donnes sur !e f!ux d-entre de !a soc7et


5i temps dpass !ors d-une !ecture * exception SocketTimeoutException est !eve Par dfaut * temps infini en !ecture sur !e f!ux

"<

C!asse 5erver5oc7et

Sockets TCP en Java

5oc7et d-attente de connexion3 cot serveur uni.uement Constructeurs

public ServerSocket(int port) throws IOException


Cre une soc7et d-coute 9d-attente de connexion de !a part de c!ients: >a soc7et est !ie au port dont !e numro est pass en paramtre >-exception est !eve notamment si ce port est d@8 !i 8 une soc7et

Bt)odes

Socket accept() throws IOException


#ttente de connexion d-un c!ient distant Muand connexion est faite3 retourne une soc7et permettant de communi.uer avec !e c!ient * soc7et de service Positionne !e temps maximum d-attente de connexion sur un accept 5i temps cou!3 !-accept !ve !-exception SocketTimeoutException Par dfaut3 attente infinie sur !-accept

void setSoTimeout(int timeout) throws SocketException


"?

Sockets TCP Java $ e emple cot client

B;me exemp!e .u-avec UDP


Connexion d-un c!ient 8 un serveur Envoi d-une c)aCne par !e c!ient et rponse sous forme d-une c)aCne par !e serveur

Cot c!ient
== adresse (P du serveur InetAddress adr = InetAddress.getByName("scinfr222"); == ouverture de connexion avec !e serveur sur !e port DDDD Socket socket = new Socket(adr, 7777);

"D

Sockets TCP Java $ e emple cot client

Cot c!ient 9suite:


== construction de f!ux o @ets 8 partir des f!ux de !a soc7et ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream()); ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); == criture d-une c)aCne dans !e f!ux de sortie * c-est-8-dire envoi de == donnes au serveur output.writeObject(new String("youpi")); == attente de rception de donnes venant du serveur 9avec !e readQ @ect: == on sait .u-on attend une c)aCne3 on peut donc faire un cast directement String chaine = (String)input.readObject(); System.out.println(" recu du serveur : "+chaine);

"1

Sockets TCP Java $ e emple cot serveur

== serveur positionne sa soc7et d-coute sur !e port !oca! DDDD ServerSocket serverSocket = new ServerSocket(7777); == se met en attente de connexion de !a part d-un c!ient distant Socket socket = serverSocket.accept(); == connexion accepte * rcupre !es f!ux o @ets pour communi.uer == avec !e c!ient .ui vient de se connecter ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream()); ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); == attente !es donnes venant du c!ient String chaine = (String)input.readObject(); System.out.println(" recu : "+chaine);

"+

Sockets TCP Java $ e emple cot serveur

Cot serveur 9suite:

== affic)e !es coordonnes du c!ient .ui vient de se connecter System.out.println(" ca vient de : " +socket.getInetAddress()+":"+socket.getPort()); == envoi d-une rponse au c!ient output.writeObject(new String("bien recu"));

Muand manipu!e des f!ux d-o @ets


5ouvent uti!e de vrifier !e type de !-o @et reEu Uti!ise instanceof Exemp!e

String chaine; Personne pers; Object obj = input.readObject(); if (obj instanceof String) chaine = (String)obj; if (obj instanceof Personne) pers = (Personne)obj;

,0

Sockets TCP

Criti.ue soc7ets TCP


#vanta$es

Giveau d-a straction p!us !ev .u-avec UDP


Bode connect avec p)ase de connexion exp!icite 4!ux d-entre=sortie

4ia !e P!us diffici!e de $rer p!usieurs c!ients en m;me temps


(nconvnients

Gcessite du para!!!isme avec des t)reads 9voir suite cours: Bais o !i$e une onne structuration cot serveur

,1

Sockets UDP ou TCP .

C)oix entre UDP et TCP


# priori simp!e

TCP est fia !e et mieux structur 5i !a fia i!it n-est pas essentie!!e 5i !a connexion entre !es 2 app!ications n-est pas uti!e Exemp!e

Bais intr;t tout de m;me pour UDP dans certains cas


Un t)ermomtre envoie toutes !es < secondes !a temprature de !-air am iant 8 un affic)eur distant

Pas $rave de perdre une mesure de temps en temps Pas $rave d-envoyer !es mesures m;me si !-affic)eur est a sent

,2

Exemp!e de protoco!e uti!isant UDP * G45


GetRor7 4i!e 5ystem 9G45:

Sockets UDP ou TCP .

#ccs 8 un systme de fic)iers distant

# priori TCP mieux adapt car esoin de fia i!it !ors des transferts des fic)iers3 mais

G45 est $nra!ement uti!is au sein d-un rseau !oca!

Peu de pertes de pa.uets TCP $re un protoco!e assurant !a fia i!it imp!i.uant de nom reux c)an$es supp!mentaires entre !es app!ications 9envoi d-ac.uittement...: Peu de perte de pa.uet en UDP en !oca! * peu directement $rer !a fia i!it au niveau G45 ou app!icatif et c-est moins couteux en temps

UDP est p!us asi.ue et donc p!us rapide


Dans ce contexte3 i! n-est pas pna!isant d-uti!iser UDP au !ieu de TCP pour G45

G45 fonctionne sur ces 2 couc)es

,"

Serveur en "estion multi*clients

,,

Par principe3 !es !ments distants communi.uants sont actifs en para!!!e


P!usieurs processus concurrents #vec processus en pause !ors d-attente de messa$es

Concurrence

Exemp!e de f!ux d-excution pour notre exemp!e de c!ient=serveur prcdent


temps

,<

Sockets TCP $ "estion plusieurs clients

Particu!arit cot serveur en TCP

Une soc7et d-coute sert 8 attendre !es connexions des c!ients # !a connexion d-un c!ient3 une soc7et de service est initia!ise pour communi.uer avec ce c!ient Envoi de donnes 8 un c!ient

Communication avec p!usieurs c!ients pour !e serveur

UDP * on prcise !-adresse du c!ient dans !e pa.uet 8 envoyer TCP * uti!ise !a soc7et correspondant au c!ient UDP * se met en attente d-un pa.uet et re$arde de .ui i! vient TCP * doit se mettre en attente de donnes sur toutes !es soc7ets actives ,?

Hception de donnes venant d-un c!ient .ue!con.ue


Sockets TCP $ "estion plusieurs clients

Communication avec p!usieurs c!ients 9suite:


Contrainte

>ecture sur une soc7et * opration !o.uante

Tant .ue des donnes ne sont pas reEues Fus.u-8 !a proc)aine connexion d-un c!ient distant

#ttente de connexion * opration !o.uante

#vec un seu! f!ot d-excution 9processus=t)read:

5i ne sait pas .ue! est !-ordonnancement des arrives des donnes des c!ients ou de !eur connexion au serveur

(mpossi !e 8 $rer

Donc ncessit de p!usieurs processus ou t)reads


Un processus en attente de connexion sur !e port d-coute Gouve!!e connexion * un nouveau processus est cr pour $rer !a communication avec !e nouveau c!ient ,D

Sockets TCP $ "estion plusieurs clients

Louc!e de fonctionnement $nra! d-un serveur pour $rer p!usieurs c!ients


R)i!e9true: soc7etC!ient ' acceptConnection9: neRT)read9soc7etC!ient: Exemp!e avec 2 c!ients -S

,1

You might also like