SRCS :La programmation réseau en Java.
Version 15.01
Julien Sopena1
[email protected]Équipe REGAL - INRIA RocquencourtLIP6 - Université Pierre et Marie Curie
Master SAR 1ère année - SRCS - 2016/2017
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