• Aucun résultat trouvé

Communication inter-processus : une introduction (Programation en java)

N/A
N/A
Protected

Academic year: 2022

Partager "Communication inter-processus : une introduction (Programation en java)"

Copied!
38
0
0

Texte intégral

(1)

Communication inter-processus : une introduction (Programation en java)

Rushed Kanawati

LIPN, CNRS UMR 7030 Universit´e Paris 13 http://lipn.fr/∼kanawati [email protected]

January 31, 2017

(2)

Plan

1 Introduction

2 Classes Java pour la programmation r´eseaux: TCP/IP La classe InetAddress

Classes pour communication UDP Serveur UDP multi-threads Communication Multicast Communication TCP

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 2 / 38

(3)

Introduction

Objectifs

Communication inter-processus par tube

Programmation de clients/serveurs : UDP et TCP

Programmation de clients/Serveur r´ eseaux multi-threads

(4)

Introduction

Communication inter-processus

Les tubes

:

communication unidirectionnelle

entr´ee processus p`eere/fils ou processus fr`eres.

Les sockets

communication bidirectionnelle gestion similaire aux sockets interUnix.

Communiquer = ´ecrire dans un fichier

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 4 / 38

(5)

Introduction

Communication par tube en Java

// c r ´e e r une s o r t i e p u i s une e n t r ´e e // r e l i ´e e `a c e t t e s o r t i e ou l ’ i n v e r s e ! P i p e d W r i t e r t u b o u t = new P i p e d W r i t e r ();

P i p e d R e a d e r t u b i n = new P i p e d R e a d e r ( t u b o u t );

(6)

Introduction

Ecriture dans un tube

// D a n s t h r e a d p r o d u c t e u r ( ´e c r i t m e s s a g e m ) S t r i n g m = " b o n j o u r ";

// C o n v e r s i o n de m : S t r i n g en buf : c h a r []

buf = new c h a r[ m . l e n g t h ( ) ] ; m . g e t C h a r s (0 , m . l e n g t h () , buf , 0 ) ; // e c r i t d a n s le t u b e

out . w r i t e ( cbuf ,0 , mes . l e n g t h ( ) ) ;

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 6 / 38

(7)

Introduction

Lecture d’un tube

c h a r c b u f []= new c h a r[ 2 0 ] ; int c h a r L u =0;

do{ try{

c h a r L u = in . r e a d ( cbuf ,0 ,20);

// le c o n s o m m a t e u r se s u i c i d e au b e s o i n ! if ( c h a r L u == 1){

S y s t e m . out . p r i n t l n (" fin ");

S y s t e m . e x i t ( 0 ) ; }

S t r i n g s = new S t r i n g ( cbuf ,0 , c h a r L u );

(8)

Introduction

Rappel : Architecture Logicielle TCP/IP

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 8 / 38

(9)

Introduction

Communication TCP/TP : Caract´ erisation

Adresses IP

source et destination Num´ ero de

ports

source et destination.

Protocole

de transport utilis´ e : UDP ou TCP

(10)

Introduction

Num´ ero de Port

Un port d´ esigne le SAP (Service Access Point) de la couche application.

L’adresse d’une application sur le r´ eseau est donc d´ efinie par le couple :

@IP d la machine : num´ero de port.

L’IANA

1

r´ epartit les num´ eros de ports en trois cat´ egories :

Les ports syst`emes: 0 - 1023. Sous Linux l’utilisation de ces ports n´ecessite d’avoir les privil`eges d’administrateur.

Les ports d´epos´es : 1024 - 49151 sont disponibles pour les utilisateurs et peuvent eux aussi ˆetre d´epos´es aupr`es de l’ IANA

Les ports priv´es: 49152 `a 65535.

1Internet Assigned Numbers Authority, http://www.iana.org

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 10 / 38

(11)

Introduction

Le concept de socket

Un

socket

est une

interface

entre une application et un service de la couche de transport.

Plusieurs

types

de socket : socket UDP et socket TCP.

Il est repr´ esent´ e comme un fichier : l’´ ecriture dans ce fichier

corresponds ` a l’envoie d’un message selon le protocole associ´ e (UDP ou TCP). La r´ eception d’un message se fait par une op´ eration de lecture.

Un socket est associ´ e alors ` a un protocole de transport et ` a un

num´ ero de port.

(12)

Classes Java pour la programmation r´eseaux: TCP/IP

TCP/IP : Programmation en Java

Le paquetage

java.net

offre les classes de base :

InetAddress: pour la manipulation d’adresses IP.

DatagramSocket: pour la manipulation de sockets UDP.

DatagramPacket: pour la manipulation de paquets UDP.

ServerSocket: pour la manipulation de socket de serveurs TCP Socket: pour la manipulation de socket TCP d’´echange de donn´ees.

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 12 / 38

(13)

Classes Java pour la programmation r´eseaux: TCP/IP La classe InetAddress

La classe InetAddress

Cette classe n’offre pas de constructeurs. La cr´

eation d’un objet passe par l’appel d’une des m´ ethodes statiques suivantes :

static InetAddress getLocalHost() throws UnknownHostException

Retourne un objet InetAddress repr´esentant la machine locale public static InetAddress getByName(String host) throws UnknownHostException

Retourne un objet InetAddress qui corresponds ) la r´esolution par le syst`eme DNS de nomhost.

public static InetAddress[] getAllByName(String host) throws UnknownHostException

Retourne toutes les adresses retrouv´ees de host.

(14)

Classes Java pour la programmation r´eseaux: TCP/IP La classe InetAddress

La classe InetAddress : Exemples

I n e t A d d r e s s a , b , c ; ...

try {

a = I n e t A d d r e s s . g e t L o c a l H o s t ();

b = I n e t A d d r e s s . g e t B y N a m e (" i u t v . univ - p a r i s 1 3 . fr ");

c = I n e t A d d r e s s . g e t B y N a m e (" 1 2 7 . 0 . 0 . 1 ");

} c a t c h ( U n k n o w n H o s t E x c e p t i o n e ) { ... }

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 14 / 38

(15)

Classes Java pour la programmation r´eseaux: TCP/IP La classe InetAddress

La classe InetAddress : m´ ethodes de services

public String getHostName()

Retourne le nom complet correspondant ` a l’adresse IP public String getHostAddress()

Retourne l’adresse IP sous forme num´ erique.

public byte[] getAddress()

Retourne l’adresse IP sous forme d’une suite d’octets.

(16)

Classes Java pour la programmation r´eseaux: TCP/IP Classes pour communication UDP

Rappel : Protocole UDP

UDP op` ere en mode

non connect´e

: ´ echange de datagramms (paquets)

L’entˆ ete d’un paquet UDP contient les num´ eros de ports source et destination.

Les adresses IP sont dans l’entˆ ete IP encapsul´ e dans le paquet.

Un paquet UDP contient donc : Les adresses IP source et destination, les ports source et destination et le message ` a envoyer (suite d’octets)

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 16 / 38

(17)

Classes Java pour la programmation r´eseaux: TCP/IP Classes pour communication UDP

La classe DatagramPacket

Classe de manipulation de paquets UDP.

Constructeur pour encapsuler un paquet UDP ` a recevoir :

DatagramPacket(byte[] buf, int length)

o` u

buf

est le message ` a recevoir et

length

la taille du message.

Constructeur pour encapsuler un paquet UDP ` a envoyer :

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

o` u

buf

est le message ` a envoyer,

length

la taille du message,

address

est l’adresse IP destination et

port

est le port destination.

Attention

le message

buf

doit ˆ etre initialis´ e avant la construction du

paquet.

(18)

Classes Java pour la programmation r´eseaux: TCP/IP Classes pour communication UDP

La classe DatagramPacket : m´ ethodes de services

InetAddress getAddress()

Retourne l’adresse IP de la machine distante.

int getPort()

Retourne le num´ ero de port distant.

byte[] getData()

Retourne la partie donn´ ee du paquet.

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 18 / 38

(19)

Classes Java pour la programmation r´eseaux: TCP/IP Classes pour communication UDP

Classe DatagramSocket

Constructeurs :

public DatagramSocket() throws SocketException Cr´ eation d’un socket UDP associ´ e ` a un port libre (priv´ e)

public DatagramSocket(int port) throws SocketException

Cr´ eation d’un socket UDP associ´ e au port

port

(20)

Classes Java pour la programmation r´eseaux: TCP/IP Classes pour communication UDP

DatagramSocket : M´ ethodes de service

public void send(DatagramPacket p) throws IOException Envoyer le paquet p

public void receive(DatagramPacket p) throws IOException

recevoir un paquet p.

L’appel ce cette m´ethode est bloquante.

public void setSoTimeout(int timeout) throws SocketException

Permet de d´ ebloquer le thread ex´ ecutant une m´ ethode recieve au bout de timeout seconds.

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 20 / 38

(21)

Classes Java pour la programmation r´eseaux: TCP/IP Classes pour communication UDP

Exemple : Envoie de message UDP (1)

/* I n i t i a l i s a t i o n d ’ un s o c k e t UDP */

D a t a g r a m S o c k e t s o c k e t = new D a t g r a m S o c k e t ()

/* i d e n t i f i c a t i o n de l ’ a p p l i c a t i o n d e s t i n a t i o n : @IP ; p o r t */

I n e t A d d r e s s a d d r e s s =

I n e t A d d r e s s . g e t B y N a m e (" i u t v . univ - p a r i s 1 3 . fr ");

int p o r t = 8 8 8 8 ;

/* Le m e s s a g e `a e n v o y e r */

S t r i n g s = new S t r i n g (" B o n j o u r P a r i s 13 ");

b y t e[] m e s s a g e = new b y t e[ 1 0 2 4 ] ;

/* t r a n s f o r m a t i o n du m e s s a g e en s u i t e d ’ o c t e t s */

(22)

Classes Java pour la programmation r´eseaux: TCP/IP Classes pour communication UDP

Exemple : Envoie de message UDP (2)

/* F o r m a t i o n du p a q u e t UDP `a e n v o y e r */

D a t a g r a m P a c k e t p a q u e t =

new D a t a g r a m P a c k e t ( message , l o n g u e u r , address , p o r t );

/* e n v o i du p a q u e t */

s o c k e t . s e n d ( p a q u e t );

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 22 / 38

(23)

Classes Java pour la programmation r´eseaux: TCP/IP Classes pour communication UDP

Exemple : R´ eception de message UDP (1)

try {

D a t a g r a m S o c k e t s o c k e t = new D a t a g r a m S o c k e t ( 8 8 8 8 ) ; b y t e[] b u f f e r = new b y t e[ 1 0 2 4 ] ;

// On a s s o c i e un p a q u e t `a un b u f f e r v i d e p o u r la r ´e c e p t i o n D a t a g r a m P a c k e t p a q u e t =new

D a t a g r a m P a c k e t ( buffer , b u f f e r . l e n g t h );

/* a t t e n t e de r ´e c e p t i o n */

s o c k e t . r e c e i v e ( p a q u e t );

/* a f f i c h a g e du p a q u e t r e ¸c u */

S t r i n g s = new S t r i n g ( b u f f e r );

S y s t e m . out . p r i n t l n (" m e s s a g e r e ¸c u : " + s );

(24)

Classes Java pour la programmation r´eseaux: TCP/IP Serveur UDP multi-threads

Serveur UDP multi-threads

Pourquoi ?

R´ eduire le temps d’attente de traitement de requˆ etes en permettant le traitement parall` ele.

Comment ?

Pour chaque paquet UDP re¸ cu par le serveur, un

thread

de traitement se charge du traitement du paquet.

Optimisation :

Un serveur peut anticiper la cr´ eation de threads de traitement afin de r´ eduire le temps d’attente de traitement d’une requˆ ete.

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 24 / 38

(25)

Classes Java pour la programmation r´eseaux: TCP/IP Serveur UDP multi-threads

Serveur UDP multi-threads : Exemple

D a t a g r a m S o c k e t s o c k e t = new D a t a g r a m S o c k e t ( 8 8 8 8 ) ; w h i l e(t r u e) {

b y t e[] b u f f e r = new b y t e[ 1 0 2 4 ] ; D a t a g r a m P a c k e t p a q u e t =

n e w D a t a g r a m P a c k e t ( buffer , b u f f e r . l e n g t h );

s o c k e t . r e c e i v e ( p a q u e t );

/* L a n c e m e n t d ’ un t h r e a d de t r a i t e m e n t

`

a la r ´e c e p t i o n d ’ un p a q u e t */

new H a n d l e r ( p a q u e t ). s t a r t ();

(26)

Classes Java pour la programmation r´eseaux: TCP/IP Serveur UDP multi-threads

Serveur UDP multi-threads : Exemple

c l a s s H a n d l e r e x t e n d s T h r e a d { p r i v a t e D a t a g r a m P a c k e t p ;

p u b l i c H a n d l e r ( D a t a g r a m P a c k e t p ) t h r o w s E x c e p t i o n { if ( p != n u l l} {

t h i s. p = p ; } e l s e {

t h r o w new E x c e p t i o n ();

}

p u b l i c v o i d run () {

/* t r a i t e m e n t du p a q u e t */

}

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 26 / 38

(27)

Classes Java pour la programmation r´eseaux: TCP/IP Communication Multicast

Communication Multicast

Communication Multicast : Diffusion restreinte de messages au sein d’un groupe.

Un groupe multicarte est identifi´ e par une adresse IP de classe

D.

Plage d’adresses de classe D (IPv4) : 224.0.0.1 - 239.255.255.255.

224.0.0.0 - 224.0.0.255 : adresses r´eserv´ees pour des services syst`emes.

224.0.0 - 238.255.255.255 : adresses publiques 239.0.0.0 - 239.255.255.255: adresses priv´ees.

Utilisation d’un socket sp´ ecial :

MulticastSocket

(28)

Classes Java pour la programmation r´eseaux: TCP/IP Communication Multicast

La classe MulticastSocket

Sous-classe de

DatagramSocket

Constructeurs :

p u b l i c M u l t i c a s t S o c k e t () t h r o w s I O E x c e p t i o n /* C r ´e a t i o n d ’ un s o c k e t m u l t i c a s t a s s o c i ´e

`

a un p o r t UDP l i b r e */

p u b l i c M u l t i c a s t S o c k e t (int p o r t ) t h r o w s I O E x c e p t i o n /* C r ´e a t i o n d ’ un s o c k e t m u l t i c a s t a s s o c i ´e

au p o r t UDP p o r t */

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 28 / 38

(29)

Classes Java pour la programmation r´eseaux: TCP/IP Communication Multicast

La classe MulticastSocket

Quelques m´ ethodes de services :

p u b l i c v o i d j o i n G r o u p ( I n e t A d d r e s s m c a s t a d d r ) t h r o w s I O E x c e p t i o n

/* r e j o i n d r e un g r o u p e de m u l t i c a s t */

p u b l i c v o i d l e a v e G r o u p ( I n e t A d d r e s s m c a s t a d d r ) t h r o w s I O E x c e p t i o n

/* Q u i t t e r un g r o u p e de m u l t i c a s t */

p u b l i c v o i d s e t T i m e T o L i v e (int ttl ) t h r o w s I O E x c e p t i o n /* F i x e r le TTL a s s o c i ´e aux p a q u e t s UDP */

p u b l i c int g e t T i m e T o L i v e ()

(30)

Classes Java pour la programmation r´eseaux: TCP/IP Communication Multicast

Multicast : exemple

p u b l i c c l a s s M u l t i c a s t {

p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ){

M u l t i c a s t S o c k e t soc ; I n e t A d d r e s s adr ; D a t a g r a m P a c k e t p ; b y t e[] msg ;

try{

adr = I n e t A d d r e s s . g e t B y N a m e (" 2 2 8 . 5 . 6 . 7 ");

soc = new M u l t i c a s t S o c k e t ();

soc . j o i n G r o u p ( adr );

msg = new S t r i n g (" S a l u t !! "). g e t B y t e s ();

p = new D a t a g r a m P a c k e t ( msg , msg . length , adr , 8 8 8 8 ) ; soc . s e n d ( p );

}c a t c h( E x c e p t i o n ex ){}

}

} R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 30 / 38

(31)

Classes Java pour la programmation r´eseaux: TCP/IP Communication Multicast

Multicast : exemple

p u b l i c c l a s s M C C l i e n t {

p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ){

M u l t i c a s t S o c k e t soc ; I n e t A d d r e s s adr ; D a t a g r a m P a c k e t p ; b y t e[] msg ;

try{

adr = I n e t A d d r e s s . g e t B y N a m e (" 2 2 8 . 5 . 6 . 7 ");

soc = new M u l t i c a s t S o c k e t ( 8 8 8 8 ) ; soc . j o i n G r o u p ( adr );

msg = new b y t e[ 1 0 2 4 ] ;

p = new D a t a g r a m P a c k e t ( msg , msg . l e n g t h );

soc . r e c e i v e ( p );

S y s t e m . out . p r i n t l n (" M e s s a g e r e ¸c u "+

new S t r i n g ( p . g e t D a t a ( ) ) ) ;

(32)

Classes Java pour la programmation r´eseaux: TCP/IP Communication TCP

Communication TCP

Communication en

mode connect´e

Communication en trois phases : connexion, ´echange, d´econnexion.

Contrˆole d’erreurs et de perte de messages : m´ecanismes d’acquittements.

La phase de connexion est

asym´etrique. On parle alors de serveur et

de client.

Le serveur TCP utilise un socket de la classe

ServerSocket.

L’´ echange de messages se fait ` a travers de sockets de la classe

Socket

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 32 / 38

(33)

Classes Java pour la programmation r´eseaux: TCP/IP Communication TCP

La classe ServerSocket

Rˆ ole : attendre la r´ eception de demande de connexion. Puis cr´ eation d’un socket d’´ echange sur acceptation.

Constructeur :

p u b l i c S e r v e r S o c k e t (int p o r t )

t h r o w s I O E x c e p t i o n ; /* C r ´e a t i o n d ’ un s o c k e t de c o n n e x i o n TCP a s s o c i ´e

au p o r t p o r t */

M´ etode d’acceptation de demande de connexion:

p u b l i c S o c k e t a c c e p t ()

t h r o w s I O E x c e p t i o n ; /* A t t e n t e de d e m a n d e de c o n n e x i o n ,

c r ´e a t i o n s ’ un s o c k e t d ’ ´e c h a n g e a p r `e s a c c e p t a t i o n */

(34)

Classes Java pour la programmation r´eseaux: TCP/IP Communication TCP

La classe Socket

Constructeur :

p u b l i c S o c k e t ( I n e t A d d r e s s server , int p o r t ) t h r o w s I O E x c e p t i o n ; /* D e m a n d e de c o n n e x i o n au s e r v e u r TCP

d o n t l ’ a d r e s s e est s e r v e r et qui est

`

a l ’ ´e c o u t e sur p o r t */

M´ ethode d’´ echange de donn´ ees :

p u b l i c I n p u t S t r e a m g e t I n p u t S t r e a m ();

/* r e n v o y e r un f l u s d ’ e n t r ´e e p o u r l i r e les m e s s a g e s */

p u b l i c O u t p u t S t r e a m g e t O u t p u t S t r e a m ();

/* r e n v o y e r un f l u s d ’ e n t r ´e e p o u r l ’ e n v o i de m e s s a g e s */

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 34 / 38

(35)

Classes Java pour la programmation r´eseaux: TCP/IP Communication TCP

Serveur TCP : exemple

p u b l i c c l a s s E c h o S e r v e r {

p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ) { S e r v e r S o c k e t s e r S o c ;

D a t a I n p u t S t r e a m in ; P r i n t S t r e a m out ; S o c k e t soc ; try {

s e r S o c = new S e r v e r S o c k e t ( I n t e g e r . p a r s e I n t ( a r g s [ 0 ] ) ) ; w h i l e(t r u e) {

soc = s e r S o c . a c c e p t ();

in = new D a t a I n p u t S t r e a m ( soc . g e t I n p u t S t r e a m ( ) ) ;

(36)

Classes Java pour la programmation r´eseaux: TCP/IP Communication TCP

Serveur TCP : exemple

w h i l e (t r u e) {

S t r i n g l i g n e = in . r e a d L i n e ();

out . p r i n t l n (" E C H O : "+ l i g n e );

} }

} c a t c h ( E x c e p t i o n e ) { } } }

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 36 / 38

(37)

Classes Java pour la programmation r´eseaux: TCP/IP Communication TCP

Client TCP : exemple

p u b l i c c l a s s E c h o C l i e n t {

p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ) { S o c k e t soc ;

D a t a I n p u t S t r e a m in ;

D a t a I n p u t S t r e a m u s e r I n p u t ; P r i n t S t r e a m out ;

S t r i n g l i g n e ; try {

soc = new S o c k e t ( a r g s [0] , I n t e g e r . p a r s e I n t ( a r g s [ 1 ] ) ) ; in = new D a t a I n p u t S t r e a m ( soc . g e t I n p u t S t r e a m ( ) ) ;

out = new P r i n t S t r e a m ( soc . g e t O u t p u t S t r e a m ( ) ) ;

(38)

Classes Java pour la programmation r´eseaux: TCP/IP Communication TCP

Client TCP : exemple

w h i l e (t r u e) {

l i g n e = u s e r I n p u t . r e a d L i n e ();

if ( l i g n e . e q u a l s (" . ")) b r e a k;

out . p r i n t l n ( l i n g o );

S y s t e m . out . p r i n t l n ( in . r e a d L i n e ( ) ) ; }

}

c a t c h ( U n k n o w n H o s t E x c e p t i o n e ) { } c a t c h ( I O E x c e p t i o n e ) { } } }

R. Kanawati (LIPN) Syst`emes d’exploitation January 31, 2017 38 / 38

Références

Documents relatifs

Il est possible de réaliser le spectre d’émission de raie du gaz enfermé dans l’ampoule à l’aide du dispositif ci-dessous : 1.Quel dispositif faut-il placer entre la fente

◮ On peut enchaˆıner une s ´election avec une insertion, pour remplir une table avec les r ´esultats d’une requ ˆete SELECT :.. INSERT INTO R(a1, a2...)

• (a) and (b) dominent la production de paire “nucl´ eaire” (dans le champ d’un noyau) de par les rapports de masse e/r... “Longueur de Radiation”

Step 1 : Eah student throws a die ten times, builds a frequeny table and draws a.. relative frequeny polygon, with sale 2 m for 1 on the x -axis and 10 m for

Build a frequency table to show your results, with both absolute and relative frequencies.. Draw a relative frequency polygon in grey, with unit 2 cm on the x -axis and 10 cm on the

Le gestionnaire de la biblioth` eque veut savoir pour quelles mati` eres on a achet´ e chaque livre, et quels sont les enseignants qui ont recommand´ e l’achat d’un livre.. Dans

Constructeur : Socket (String host, int port) cr´ eation du socket vers le port et la machine hˆ ote sp´ ecifi´ es. M´

La r´ esolution d’un syst` eme d’´ equations lin´ eaires se traduit matriciellement par Ax = b o` u A est une matrice, b un vecteur et x l’inconnue. R´ esoudre donc Ax = b,