coursjava: laprogrammationréseauen java

Post on 23-Jul-2022

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Cours JAVA :La programmation réseau en Java.

Version 1.01

Julien Sopena1

1julien.sopena@lip6.frÉquipe REGAL - INRIA RocquencourtLIP6 - Université Pierre et Marie Curie

Licence professionnelle DANT - 2015/2016

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 1 / 16

Grandes lignes du cours

Une abstraction des protocoles réseauGestion des addresses réseau en JavaLe sockets TCPLe sockets UDP

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 2 / 16

Outline

Une abstraction des protocoles réseauGestion des addresses réseau en JavaLe sockets TCPLe sockets UDP

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 3 / 16

Quel niveau d’abstraction pour le réseau ?

Les 7 couches du modèle OSI

Couche 7 - Applicative : Les logiciels (ex : NFS)Couche 6 - Présentation : Représentation des données (ex : XDR)Couche 5 - Session : Établissement et maintient des sessions (ex : RPC)Couche 4 - Transport : Liaison de bout en bout (ex : UDP, TCP, ...)Couche 3 - Réseau : Adressage et routage entre machines (ex : IP)Couche 2 - Liaison : Gestion des envois point à point (ex : Ethernet)Couche 1 - Physique : Support de transmission

Les Sockets Java offrent une abstraction du réseau au niveau descouches Transport (4) et Réseau (3). Java introduit doncdifférentes classes correspondant aux protocoles abstraits : TCP ouUDP.

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 4 / 16

Quel niveau d’abstraction pour le réseau ?

Les 7 couches du modèle OSI

Couche 7 - Applicative : Les logiciels (ex : NFS)Couche 6 - Présentation : Représentation des données (ex : XDR)Couche 5 - Session : Établissement et maintient des sessions (ex : RPC)Couche 4 - Transport : Liaison de bout en bout (ex : UDP, TCP, ...)Couche 3 - Réseau : Adressage et routage entre machines (ex : IP)Couche 2 - Liaison : Gestion des envois point à point (ex : Ethernet)Couche 1 - Physique : Support de transmission

Les Sockets Java offrent une abstraction du réseau au niveau descouches Transport (4) et Réseau (3). Java introduit doncdifférentes classes correspondant aux protocoles abstraits : TCP ouUDP.

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 4 / 16

La notion de mode de connecté

DéfinitionEn mode connecté, la communication entre un client et un serveur est pré-cédée d’une connexion et suivie d’une fermeture :

I Facilite la gestion d’étatI Meilleurs contrôle des arrivées/départs de clientsI Uniquement communication unicastI Plus lent au démarrage

DéfinitionEn mode non connecté, les messages sont envoyés librement :

I Plus facile à mettre en œuvreI Plus rapide au démarrage

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 5 / 16

Les protocoles TCP et UDP

TCP : une communication de type téléphoneI Mode connecté : protocole de prise de connexion (lent)I Sans perte : un message arrive au moins un foisI Sans duplication : un message arrive au plus une foisI Avec fragmentation : les messages peuvent être coupésI Ordre respecté : messages délivrés dans l’ordre d’émission

UDP : une communication de type courrierI Mode non connecté : pas de protocole de connexion (plus rapide)I Avec perte : l’émetteur n’est pas assuré de la délivranceI Avec duplication : un message peut arriver plus d’une foisI Sans fragmentation : les messages envoyés ne sont jamais coupés

=⇒ soit un message arrive entièrement, soit il n’arrive pasI Ordre non respecté : messages délivrés dans l’ordre d’arrivé

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 6 / 16

La notion de mode de connecté

AttentionIl ne faut pas confondre connexion au niveau transport etconnexion au niveau applicatif :

I FTP fonctionne en connecté en utilisant TCPI DNS fonctionne en non-connecté en utilisant UDPI HTTP fonctionne en non-connecté en utilisant TCP

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 7 / 16

Les SocketsDéfinitionUne Socket est une API (interface logicielle) avec les services dusystème d’exploitation, qui permet d’exploiter facilement et demanière uniforme les services d’un protocole réseau.

Une socket est un demi-point de connexion d’une application.

Machine 1

Socket Socket

Machine 2

Java défini plusieurs classes de sockets suivant le protocole :I TCP : ServerSocket et SocketI UDP : DatagramSocket

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 8 / 16

Outline

Une abstraction des protocoles réseauGestion des addresses réseau en JavaLe sockets TCPLe sockets UDP

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 9 / 16

Identification des sockets

Une socket est identifiée par :I en absence de connexion : 〈@IP,port〉I en cas de connexion : (〈@IPsrc,portsrc〉,〈@IPdest,portdest〉)

AttentionDeux sockets peuvent occuper le même port local si elles sontconnectées sur des IPs et/ou ports différents.

Il existe deux classes pour gérer les addresses :InetAddress : représente une adresse internet (ip/fqdn)SocketAddress : représente l’adresse d’une socket

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 10 / 16

InetAddress : les adresses internetLa classe InetAddress sert à représenter les adresses internet

I pas de constructeur mais des méthodes statiques

InetAddress me = InetAddress.getByName("sopena.fr");System.out.println(me.getHostAddress()+" = "+me.getHostName());

90.46.19.126 = sopena.fr

InetAddress g = InetAddress.getByAddress(new byte[] {8,8,8,8});System.out.println(g.getHostAddress()+" = "+g.getCanonicalHostName());

8.8.8.8 = google-public-dns-a.google.com

InetAddress ici = InetAddress.getLocalHost();System.out.println(ici.getHostAddress()+" = "+ici.getHostName());

132.227.112.199 = ppti-14-508-07.ufr-info-p6.jussieu.fr

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 11 / 16

SocketAddress : les adresses internet

La classe InetSocketAddress sert à représenter 〈@IP,port〉 :I elle hérite de la classe abstraite SocketAddressI ces instances sont des objets immuablesI elle n’associe pas le protocole utilisé

On peut les construire ou les récupèrer de :I sockets existantesI de packets reçu ou émis

InetSocketAddress localhost =new InetSocketAddress("localhost", 8080);

socket.connect(localhost);

SocketAddress ici = socket.getLocalSocketAddress();SocketAddress labas = socket.getRemoteSocketAddress();

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 12 / 16

Outline

Une abstraction des protocoles réseauGestion des addresses réseau en JavaLe sockets TCPLe sockets UDP

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 13 / 16

Utilisation d’une socket TCP

Serveur Client

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080is = c.getInputStream()

os = c.getOutputStream()

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080is = c.getInputStream()

os = c.getOutputStream()x = is.read()

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080is = c.getInputStream()

os = c.getOutputStream()x = is.read()

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080is = c.getInputStream()

os = c.getOutputStream()x = is.read()

os.write(2)

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080is = c.getInputStream()

os = c.getOutputStream()x = is.read()

os.write(2) print("x="+x)print("x="+x)

y=3

x=2

x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080is = c.getInputStream()

os = c.getOutputStream()x = is.read()

os.write(2) print("x="+x)print("x="+x)is = c.getInputStream()

y = is.read()

y=3

x=2

x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080is = c.getInputStream()

os = c.getOutputStream()x = is.read()

os.write(2) print("x="+x)print("x="+x)is = c.getInputStream()

y = is.read()

y=3

x=2

x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080is = c.getInputStream()

os = c.getOutputStream()x = is.read()

os.write(2) print("x="+x)print("x="+x)is = c.getInputStream()

y = is.read()os = c.getOutputStream()

os.write(x+1)

y=3

x=2

x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080is = c.getInputStream()

os = c.getOutputStream()x = is.read()

os.write(2) print("x="+x)print("x="+x)is = c.getInputStream()

y = is.read()os = c.getOutputStream()

os.write(x+1) print("y="+y)

y=3 x=2

x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080is = c.getInputStream()

os = c.getOutputStream()x = is.read()

os.write(2) print("x="+x)print("x="+x)is = c.getInputStream()

y = is.read()os = c.getOutputStream()

os.write(x+1) print("y="+y)

x = is.read()

y=3 x=2

x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080is = c.getInputStream()

os = c.getOutputStream()x = is.read()

os.write(2) print("x="+x)print("x="+x)is = c.getInputStream()

y = is.read()os = c.getOutputStream()

os.write(x+1) print("y="+y)

x = is.read()

y=3 x=2

x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

is = c.getInputStream()os = c.getOutputStream()

x = is.read() os.write(2) print("x="+x)print("x="+x)is = c.getInputStream()

y = is.read()os = c.getOutputStream()

os.write(x+1) print("y="+y)

x = is.read()

c.close()

y=3 x=2

x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

is = c.getInputStream()os = c.getOutputStream()

x = is.read() os.write(2) print("x="+x)print("x="+x)is = c.getInputStream()

y = is.read()os = c.getOutputStream()

os.write(x+1) print("y="+y)

x = is.read()

c.close() print("x="+x)

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

c.connect(localhost,8080)Socket c =

is = c.getInputStream()os = c.getOutputStream()

x = is.read() os.write(2) print("x="+x)print("x="+x)is = c.getInputStream()

y = is.read()os = c.getOutputStream()

os.write(x+1) print("y="+y)

x = is.read()

c.close() print("x="+x)

c.close()

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Utilisation d’une socket TCP

Serveur Client

s = new ServerSocket(8080)

s.accept()

Socket c = new Socket()

c.connect(localhost,8080)Socket c =

is = c.getInputStream()os = c.getOutputStream()

x = is.read() os.write(2) print("x="+x)print("x="+x)is = c.getInputStream()

y = is.read()os = c.getOutputStream()

os.write(x+1) print("y="+y)

x = is.read()

c.close() print("x="+x)

c.close()s.close()

y=3 x=2x=-1

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Fermeture de la socket de connexion

Serveur Client

s = new ServerSocket(8080)s = new ServerSocket(8080)

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080

8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Fermeture de la socket de connexion

Serveur Client

s = new ServerSocket(8080)s = new ServerSocket(8080)

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080s.close()

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Fermeture de la socket de connexion

Serveur Client

s = new ServerSocket(8080)s = new ServerSocket(8080)

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080s.close() is = c.getInputStream()

os = c.getOutputStream()x = is.read()

os.write(2) print("x="+x)print("x="+x)

is = c.getInputStream()

y = is.read()

os = c.getOutputStream()

os.write(x+1)

print("y="+y)x = is.read()

c.close()

print("x="+x)

c.close()

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexion précoce : pas de socket de connexion

Serveur ClientSocket c = new Socket()

3823

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexion précoce : pas de socket de connexion

Serveur ClientSocket c = new Socket()

3823 c.connect(localhost,8080)

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexion précoce : pas de socket de connexion

Serveur ClientSocket c = new Socket()

3823 c.connect(localhost,8080)

ConnectException

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexion précoce : avant le accept du serveur

Serveur Client

s = new ServerSocket(8080) 8080 Socket c = new Socket()

3823

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexion précoce : avant le accept du serveur

Serveur Client

s = new ServerSocket(8080) 8080 Socket c = new Socket()

3823 c.connect(localhost,8080)

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexion précoce : avant le accept du serveur

Serveur Client

s = new ServerSocket(8080) 8080 Socket c = new Socket()

3823 c.connect(localhost,8080)

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexion précoce : avant le accept du serveur

Serveur Client

s = new ServerSocket(8080) 8080

s.accept()

Socket c = new Socket()

3823 c.connect(localhost,8080)Socket c =

8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexions multiples sur une socket TCP

Serveur

s = new ServerSocket(8080) 8080

Client

8080

s.accept()

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexions multiples sur une socket TCP

Serveur

s = new ServerSocket(8080) 8080

Client

8080

s.accept()

Socket c1 = new Socket()3823

c1.connect(localhost,8080)

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexions multiples sur une socket TCP

Serveur

s = new ServerSocket(8080) 8080

Client

8080

s.accept()

Socket c1 = new Socket()3823

c1.connect(localhost,8080)

8080Socket c1 =

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexions multiples sur une socket TCP

Serveur

s = new ServerSocket(8080) 8080

Client

8080

s.accept()

Socket c1 = new Socket()3823

c1.connect(localhost,8080)

8080Socket c1 =

s.accept()

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexions multiples sur une socket TCP

Serveur

s = new ServerSocket(8080) 8080

Client

8080

s.accept()

Socket c1 = new Socket()3823

c1.connect(localhost,8080)

8080Socket c1 =

s.accept()

Socket c2 = new Socket(4219)4219

c2.connect(localhost,8080)

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexions multiples sur une socket TCP

Serveur

s = new ServerSocket(8080) 8080

Client

8080

s.accept()

Socket c1 = new Socket()3823

c1.connect(localhost,8080)

8080Socket c1 =

s.accept()

Socket c2 = new Socket(4219)4219

c2.connect(localhost,8080)Socket c2 =

8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexions multiples sur une socket TCP

Serveur

s = new ServerSocket(8080) 8080

Client

8080

s.accept()

Socket c1 = new Socket()3823

c1.connect(localhost,8080)

8080Socket c1 =

s.accept()

Socket c2 = new Socket(4219)4219

c2.connect(localhost,8080)Socket c2 =

8080

s.accept()

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexions multiples sur une socket TCP

Serveur

s = new ServerSocket(8080) 8080

Client

8080

s.accept()

Socket c1 = new Socket()3823

c1.connect(localhost,8080)

8080Socket c1 =

s.accept()

Socket c2 = new Socket(4219)4219

c2.connect(localhost,8080)Socket c2 =

8080

s.accept() ClientSocket c = new

5829 Socket("sopena.fr",8080)

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexions multiples sur une socket TCP

Serveur

s = new ServerSocket(8080) 8080

Client

8080

s.accept()

Socket c1 = new Socket()3823

c1.connect(localhost,8080)

8080Socket c1 =

s.accept()

Socket c2 = new Socket(4219)4219

c2.connect(localhost,8080)Socket c2 =

8080

s.accept() ClientSocket c = new

5829 Socket("sopena.fr",8080)

8080Socket c3 =

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexions multiples sur une socket TCP

Serveur

s = new ServerSocket(8080) 8080

Client

8080

s.accept()

Socket c1 = new Socket()3823

c1.connect(localhost,8080)

8080Socket c1 =

s.accept()

Socket c2 = new Socket(4219)4219

c2.connect(localhost,8080)Socket c2 =

8080

s.accept() ClientSocket c = new

5829 Socket("sopena.fr",8080)

8080Socket c3 =

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Connexions multiples sur une socket TCP

Serveur

s = new ServerSocket(8080) 8080

Client

8080

s.accept()

Socket c1 = new Socket()3823

c1.connect(localhost,8080)

8080Socket c1 =

s.accept()

Socket c2 = new Socket(4219)4219

c2.connect(localhost,8080)Socket c2 =

s.accept() ClientSocket c = new

5829 Socket("sopena.fr",8080)

8080Socket c3 =

c2.close()

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 14 / 16

Outline

Une abstraction des protocoles réseauGestion des addresses réseau en JavaLe sockets TCPLe sockets UDP

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 15 / 16

Utilisation d’une socket UDP

Serveur Client

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

Hello!

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

Hello!

System.out.println(new String(msg))

Hello !

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

Hello!

System.out.println(new String(msg))

System.out.println("From port : " + in.getPort())

Hello !

Hell

To port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Utilisation d’une socket UDP

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

Hello!

System.out.println(new String(msg))

System.out.println("From port : " + in.getPort()) System.out.println("To port : " +

out.getPort())

Hello !

Hell

To port : 5782To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant ouverture de l’autre socket

Serveur Client

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant ouverture de l’autre socket

Serveur Clients = new DatagramSocket()

5782

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant ouverture de l’autre socket

Serveur Clients = new DatagramSocket()

5782

byte msg[] = "Hello!".getBytes()

Hello!

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant ouverture de l’autre socket

Serveur Clients = new DatagramSocket()

5782

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant ouverture de l’autre socket

Serveur Clients = new DatagramSocket()

5782

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant ouverture de l’autre socket

Serveur Clients = new DatagramSocket()

5782

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

System.out.println("To port : " + out.getPort())

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant ouverture de l’autre socket

Serveur Clients = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

System.out.println("To port : " + out.getPort())

s = new DatagramSocket(8080)

8080

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant le receive du serveur

Serveur Client

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant le receive du serveur

Serveur Clients = new DatagramSocket()

5782

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant le receive du serveur

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant le receive du serveur

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant le receive du serveur

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

System.out.println("To port : " + out.getPort())

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant le receive du serveur

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

Hello!

System.out.println("To port : " + out.getPort())

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Émission précoce : avant le receive du serveur

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

Hello!

System.out.println(new String(msg))

System.out.println("From port : " + in.getPort()) System.out.println("To port : " +

out.getPort())

Hello !

Hell

To port : 5782To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Buffer de réception trop petit

Serveur Client

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Buffer de réception trop petit

Serveur Clients = new DatagramSocket(8080)

8080

byte msg[] = new byte[50]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Buffer de réception trop petit

Serveur Clients = new DatagramSocket(8080)

8080

byte msg[] = new byte[4]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Buffer de réception trop petit

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[4]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Buffer de réception trop petit

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[4]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Buffer de réception trop petit

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[4]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

Hell

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

Buffer de réception trop petit

Serveur Clients = new DatagramSocket(8080)

8080

s = new DatagramSocket()

5782

byte msg[] = new byte[4]

DatagramPacket in = new DatagramPacket(msg, 50)

@

s.receive(in)

byte msg[] = "Hello!".getBytes()

Hello!

InetAddress localhost = InetAddress.getByName("localhost")

@

DatagramPacket out = new DatagramPacket( msg, 0, msg.length, localhost, 8080)

s.send(out)

Hell

System.out.println(new String(msg))

System.out.println("From port : " + in.getPort()) System.out.println("To port : " +

out.getPort())

HellTo port : 5782

To port : 8080

J. Sopena (INRIA/UPMC) La programmation réseau en Java. 16 / 16

top related