a la programmation réseau Notion de socket Notion de port

La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Chapitre IX : Introduction `a la programmation
r´eseau
epartement IEM
http://ufrsciencestech.u-bourgogne.fr
http://ludique.u-bourgogne.fr/~leclercq
11 mai 2006
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
1La communication client serveur TCP/IP
Principes de base
2Les sockets en Java
L’API r´eseau de Java
Les types de socket
La r´esolution de nom
Traitement des clients multiples
Datagrammes UDP
3Sockets avanc´es
Options des sockets
S´erialisation
S´erialisation
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Notion de socket
D´efinition :
Apparu `a l’origine dans les syst`emes UNIX, un socket est une
abstraction logicielle qui r´ealise une interface logicielle avec les
services r´eseau du syst`eme d’exploitation, grˆace `a laquelle un
programme peut communiquer de mani`ere uniforme avec d’autre
programme situ´es sur des machines diff´erentes.
Ainsi les socket permettent l’´echange de donn´ees entre 2
processus sur deux machines distinctes ;
Chaque machine (programme) cr´ee un socket ;
Chaque socket est associ´e `a un port (diff´erent) ;
Les deux socket devront ´eventuellement ˆetre connect´es
explicitement.
Les programmes lisent et ´ecrivent dans les sockets.
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Notion de port
Un service r´eseau TCP/IP est accessible par un port ce qui
permet d’aiguiller les donn´ees vers le processus dans le SE.
Un port est identifi´e par un entier (16 bits).
Les ports num´erot´es de 0 `a 511 sont qualifi´e well known
ports : ils donnent acc`es aux services standard (transfert de
fichiers FTP port 21, terminal Telnet port 23, courrier SMTP
port 25, serveur web port 80)
De 512 `a 1023, on trouve les services Unix.
Au del`a, (1024 ...) ce sont les ports utilisateurs disponibles
pour un service applicatif quelconque.
Un service est souvent connu par un nom : la correspondance
entre nom et num´ero de port est donn´ee par le fichier
/etc/services
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
API Java
L’API (Application Programming Interface)sockets est une
biblioth`eque de classes de communication pour TCP/IP
(java.net). Elle offre deux modes de communication :
le mode connect´e correspond au protocole TCP :
le protocole ´etablit une connexion virtuelle
se charge alors de maintenir l’int´egrit´e de la communication
g´ere les erreurs de transmission
Le mode non connect´e correspond au protocole UDP : l’envoi
est fait au mieux (best effort). C’est `a l’application de
maintenir la qualit´e de la transmission.
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Les classes socket
Java propose 4 types de classes :
Pour UDP :
DatagramSocket() pour un client
DatagramSocket(ServerPort) pour un serveur
Pour TCP :
Socket(ServerName,ServerPort) pour un client
ServerSocket(ServerPort) pour un serveur
Les sockets TCP doivent ˆetre associ´e `a des flux
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Classe Socket
Constructeur : Socket (String host, int port) cr´eation
du socket vers le port et la machine hˆote sp´ecifi´es
M´ethodes :
close() : ferme le socket ;
OutputStream getOutputStream() : renvoie un flux de
sortie pour le socket ;
IntputStream getIutputStream() : renvoie un flux de
d’entr´ee pour le socket.
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Classe ServerSocket
Constructeur : ServerSocket (int port) creation du
socket serveur sur le port sp´ecifi´e
M´ethodes :
close() : ferme le socket ;
OutputStream getOutputStream() : renvoie un flux de
sortie pour le socket ;
IntputStream getIutputStream() : renvoie un flux de
d’entr´ee pour le socket ;
Socket accept() : ´ecoute si une connexion est demand´ee
pour ce socket et l’accepte.
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
La r´esolution de nom
La mise en œuvre de la r´esolution des noms se fait `a travers
un service DNS ou un fichier local (/etc/hosts).
Ce service est accessible via la classe InetAddress.
Cette classe repesente les adresses IP et un ensemble de
m´ethodes pour les manipuler.
les applications doivent utiliser les m´ethodes getLocalHost,
getByName, ou getAllByName pour construire une nouvelle
instance de InetAddress
public class InetAddress implements Serializable
InetAddress getByName(String host) : construit un
nouvel objet InetAddress `a partir d’un nom textuel sous
forme symbolique ou sous forme num´erique
String getHostName() : obtient le nom complet
correspondant `a l’adresse IP
String getHostAddress() :obtient l’adresse IP sous forme
num´erique
byte[] getAddress() :obtient l’adresse IP sous forme d’un
tableau d’octets
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Exemple
1import ja va . net .*;
2pu blic clas s WhoAmI {
3pu blic s ta tic voi d ma in ( St rin g [] ar gs ) throws Exception {
4if ( ar gs . le ngt h != 1) {
5Sy stem . err . pr in tl n ( " Usa ge : Who Am I Ma chi ne Nam e " ) ;
6Sy st em . ex it ( 1) ;
7}
8In et Ad dre ss a = I ne tA dd res s . g etB yN ame ( a rgs [0 ]) ;
9Sy st em . out . pr in tln ( a );
10 }
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Clients multiples
1pu blic clas s Ser veu rC o nc u rr ent {
2final sta tic int port = 1 314;
3pu blic s ta tic voi d ma in ( St rin g [] ar gs )
4throws IO Exc ep tio n {
5Se rve rS ock et serveur = new S erv er So cke t ( po rt );
6while (tr ue ) {
7Connexion connexion = new Co nne xio n ( ser veu r . acc ept () );
8co nn exi on . st art () ;}
9}
10 }
11 class Connexion extends Thread {
12 So cket c onn exi on ;
13 Co nne xi on ( S ock et s ) {
14 connexion = s;}
15 pu blic void r un () {
16 St ring reque te ;
17 try { Pr int Wr ite r out =
18 new Pr intW rit er ( co nnex ion . g et Out putS trea m () );
19 B uf fe red Re ad er i n = new BufferedReader(new In putS trea mRe ad er (
20 c on ne xi on . g et In pu t St re am () ) ) ;
21 out . p ri nt ln ( "= > ") ;
22 while (!( r eq uet e = in . r ea dLi ne () ) . eq ual s (" F IN ") ) {
23 out . pr in tl n ( re qu et e + " d ep ui s " + c onnex io n . get In e tA ddr es s () + ":" +
c on ne xi on . g etP or t ( ) );
24 ou t . fl us h () ;
25 }
26 c on ne xi on . cl ose () ;
27 }
28 catch ( I OE xc ep ti on e ) { Sy st em . err . p ri nt ln ( e) ;}
29 }
30 }
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Datagrammes
le protocole UDP est beaucoup plus simple que TCP :
ne permet pas de reconstituer l’ordre d’envoi des messages ;
donc plus efficace en bande passante ;
mais moins fiable puisqu’il n’est pas dot´e d’accus´e de r´eception
(automatique)
les donn´ees sont plac´ees dans un datagramme UDP, muni
d’un en-tˆete comportant les num´eros de port d’origine et de
destination, la taille du datagramme et une somme de
contrˆole ;
ce datagramme est lui-mˆeme plac´e dans un datagramme IP
(ou paquet IP), muni d’un en-tˆete comportant entre autre les
adresses IP d’´emission et de r´eception ;
la taille des donn´ees est limit´ee `a 65 507 octets ;
impl´ement´es en Java par la classe DatagramPacket (les
donn´ees sont contenues dans un tableau d’octet).
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Datagrammes
ot´e Client :
1St ring s = " DA TADA TAD TATA " ;
2byt e [] don ne es = s . g e tB yt es ( ) ;
3In etA dd re ss a dr es se = In etA dd res s . ge tByNa me (" le nom de lhot e " );
4int por t = 55 55;
5Da tag ra m Pa cke t p aq ue t =
6new D at agr am Pa ck et ( d onn ees , d on nee s . len gth , ad resse , p ort ) ;
En r´eception cˆot´e serveur : il faut construire un datagramme c`ad
tableau d’octets qui recevra les donn´ees
1byt e [] donnees = new byte [4000];;
2Da tag ra m Pa cke t d =
3new Da ta gra mP ac ket ( d onnee s , d onn ees . l eng th );
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Socket UDP
Les datagrammes sont ´emis et re¸cus par l’interm´ediaire d’un
objet de la classe DatagramSocket
ot´e client : on utilise un port pour construire le
DatagramSocket, puis la m´ethode send
1Da tag ra m So cke t c li en t = new D a ta gr am S oc ke t ( ) ;
2cl ien t . sen d ( paq uet ) ;
ot´e serveur : le port doit ˆetre pass´e en argument au
constructeur DatagramSocket(int), et la m´ethode receive
remplit le tableau d’octets avec les donn´ees du paquet re¸cu
1Da tag ra m So cke t serveur = new D at ag ra mSo ck et ( p ort ) ;
2se rve ur . re cei ve ( pa que t );
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Serveur ECHO UDP
1import j ava . io .*;
2import ja va . net .*;
3class ServeurEchoUDP {
4pu blic s ta tic voi d ma in ( St rin g [] ar gs )
5throws UnknownHostException , IOException {
6final i nt po rt = 8080 ;
7Da tagr amP ac ket paq uet Requ ete , paq uet Re pon se ;
8Da tag ra m So cke t serveur = new D at ag ra mSo ck et ( p ort ) ;
9byt e [] don nee sRe qu ete = new byt e [4000];
10 while (tr ue ) {
11 paquetRequete = new D ata gr am Pac ke t ( don ne esR equ ete , do nn ee sRe qu et e . len gth ) ;
12 se rve ur . re cei ve ( pa qu etR eq uet e );
13 paquetReponse =
14 new Da tagr amP ac ket ( p aqu et Req uet e . get Dat a () ,
15 pa qu et Req ue te . g etL en gth () ,
16 pa qu et Req ue te . g et Add re ss () ,
17 p aq ue t Re qu et e . g e tP or t () ) ;
18 se rve ur . s end ( p aq uet Re po ns e );
19 }
20 }
21 }
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Client ECHO UDP
1class ClientEchoUDP {
2pu blic s ta tic voi d ma in ( St rin g [] ar gs )
3throws UnknownHostException , IOException {
4St ring nom Hot e = " lo cal hos t ";
5In etAd dre ss a dre sse = Ine tAd dre ss . g etB yNa me ( no mHo te );
6final i nt po rt = 8080 ;
7St rin g re quete , r epo nse ;
8Da tagr amP ac ket paq uet Requ ete , paq uet Re pon se ;
9Da tag ra m So cke t c li en t = new D a ta gr am S oc ke t ( ) ;
10 Bu ffe re d Re ade r e nt re e = new BufferedReader(new I n pu t St re a mR ea de r ( Sy st em . in )
);
11 byt e [] don nee sRe po nse = new byt e [4000];
12 while (!( r equ ete = e ntr ee . re adL in e () ). eq ual s (" END " )) {
13 d on ne e sR eq ue t e = r e que te . g et By te s () ;
14 paquetRequete =new D at agr am Pack et ( donne esReq uete ,
15 d on nee sR eq ue te . l engt h , a dres se , p ort ) ;
16 paquetReponse = new D ata gr am Pac ke t ( don ne esR epo nse , do nn ee sRe po ns e . len gth ) ;
17 cl ien t . sen d ( pa qu etR eq ue te ) ;
18 cl ient . r eceive ( pa que tRe po nse ) ;
19 reponse = new St rin g( pa que tRep ons e . get Dat a ()) ;
20 Sy stem . out . pr in tl n ( pa q ue tRe po nse . g etAdd re ss () + " : " + re po ns e ) ;
21 }
22 c lie nt . cl ose () ;
23 }
24 }
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Options des sockets
Il est possible de d´efinir le comportement des sockets avec les
options via une m´ethode set suivie du nom de l’option (grand
nombre) :
SO TIMEOUT (minuterie sur les m´ethodes bloquantes) : `a
tester avec Interrupted Exception
TCP NODELAY : envoi de paquet tr`es rapidement (attention
aux petits paquets) - Algorithme de Nagle
SO LINGER : gestion des donn´ees non transmises
TCP KEEPALIVE : gestion de l’inactivit´e
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Protocoles d’objets s´erialis´es
D´efinir les classes d’objets s´erialisables :
1// cett e d ´ef ini ti on doit ^etre ace ss ib le au c li en t et au s er ve ur
2class Objet implements Serializable {
3pu blic S tri ng n om ;
4pu blic O bjet ( S tri ng n ) {
5nom = new S tri ng (n );
6}
7pu blic String toString () {
8return " Obje t : nom " ;
9}
10 }
ot´e client :
1pu blic clas s Cl ient {
2st atic f inal int por t = 8080;
3pu blic s ta tic voi d ma in ( St rin g [] ar gs ) throws Exception {
4So cket sock et = new S ock et ( ar gs [0] , po rt ) ;
5Sy stem . out . pr in tl n ( " SOC KE T = " + so ck et );
6ObjectOutputStream oss = new ObjectOutputStream(socket.
getOutputStream());
7oss . wr it eOb jec t (new Obj et (" mon objet ") ) ;
8Sy st em . out . pr in tln ( " EN D ") ;
9// attention aux commandes de type protocole
10 oss . w rit eO bj ec t ( " END " ) ;
11 os s . cl os e () ;
12 s ock et . cl os e () ;
13 }
14 }
La communication client serveur TCP/IP Les sockets en Java Sockets avanc´es
Protocoles d’objets s´erialis´es
ot´e serveur :
1pu blic clas s Serveur{
2st atic f inal int por t = 8080;
3pu blic s ta tic voi d ma in ( St rin g [] ar gs ) throws Exception {
4ServerSocket s = new S er ve rS ock et ( p ort ) ;
5S ock et s oc = s . ac ce pt ( ) ;
6Ob j ec tIn put Str ea m ois = new Ob jec tInp utSt rea m (
7so c . g et I np ut St r ea m ( ) );
8while (tr ue ) {
9O bje ct o = o is . re ad O bj ec t () ;
10 if ( o. e qu als ( " EN D ") ) break;
11 Sy st em . out . pr in tln ( o ); // trace loc al e
12 }
13 oi s . cl os e () ;
14 so c . cl os e () ;
15 }
16 }
L’utilisation de l’objet n´ecessite de connaˆıtre le type de l’objet
re¸cu et de transtyper
Comment transtyper dynamiquement ?
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !