COURS
RÉSEAU 2
JAVA
1
2
LA PROGRAMMATION UDP
UDP est une autre couche de transport, plus
simple mais moins sécurisée que TCP.
connexion
sans
messages peuvent être perdus ou déséquencés.
orientée
est
et
Elle
les
Les messages UDP
sont
appelés
des
datagrammes.
Principe :
▪Le
transport
des
UDP
DatagramPacket (de taille limité dû au protocole
UDP)
fait
par
par
est
▪Ces paquets contiennent l’adresse de la machine et le
port destinataire. De plus les données qu'ils transportent
sont obligatoirement des tableaux de byte.
(Il faut
donc transformer les données à transporter en tableau de
byte)
▪C'est dans le paquet UDP qu'on note la machine et le
port destinataire. La socket UDP sert seulement à la
la
connexion IP pour
réception.
l'écoute pour
l'envoi
et
à
Les deux classes essentielles pour programmer en UDP
sont les classes DatagramPacket et
DatagramSocket
Advertisement
3
LES MÉTHODES UTILISÉES
Pour l’envoi:
On construit un paquet qui est une instance de
java.net.DatagramPacket
public DatagramPacket(byte[] buf, int lg,
InetAdress ia, int port)
buf : contient les données à envoyer sous forme
d’un tableau de byte,
lg : la taille des données à envoyer
InetAdress : adresse de la machine sous forme
InetAdress
port : port destinataire.
On envoi le paquet à l’aide de l’instance de
java.net.DatagramSocket
public DatagramSocket ( ) throws SocketException
public void send (DatagramPacket d) throws
IOException
LES MÉTHODES UTILISÉES
Pour la réception:
On crée un paquet instance de
java.net.DatagramPacket
public DatagramPacket(byte[] buf, int lg)
buf : tableau vide allant recevoir les données
lg : taille de ce tableau
On attend le paquet en utilisant l’instance de
java.net.DatagramSocket
public DatagramSocket(int port) throws
SocketException
port: numéro de port derrière lequel écoute le
programme de réception
public void receive (DatagramPacket d)
throws IOException
4
5
UN ÉMETTEUR UDP
import java.net.*;
import java.io.*;
public class EnvoiMessage {
public static void main (String [ ] args){
try {
// Message à envoyer
String message = "bonjour tout le monde";
// Conversion vers un tableau de byte
byte [] tmessage = message.getBytes();
// Construction du paquet à envoyer
DatagramPacket d =
new DatagramPacket(tmessage,
tmessage.length,
InetAddress.getLocalHost(), 5000);
Advertisement
// Construction de la socket pour l'envoi
DatagramSocket s = new DatagramSocket ();
// Envoyer le paquet
s.send(d);
s.close();
}
catch (IOException e){System.out.println (e);}}}
6
UN RÉCEPTEUR UDP
import java.net.*;
import java.io.*;
public class ReceptionMessage {
public static void main(String [ ] args) {
try{
while (true)
{
// Construire un paquet vide
byte [] tmessage = new byte [100];
DatagramPacket d = new
DatagramPacket ( tmessage,
tmessage.length);
// Créer une socket en attente sur le port 5000
DatagramSocket s = new DatagramSocket (5000);
// Réception du message
s.receive(d);
// Affichage sur écran du message reçu
String m = new String (tmessage);
System.out.println ("j'ai recu le message
suivant : "+m); }
s.close();
}
catch (IOException e) { System.out.println (e); }}}
7
LA DIFFUSION
Le protocole
IP a prévu de pouvoir diffuser des
messages à plusieurs machines en même temps.
Les messages sont envoyés par des paquets Multicast.
Un paquet n’est pas envoyé à un ordinateur, mais à
plusieurs ordinateurs en même temps
La classe MulticastSocket est utile pour envoyer et
recevoir des paquets Multicast
La
classe MulticastSocket
DatagramSocket
supplémentaires
avec
des
est une sous
classe de
Advertisement
fonctionnalités
Une machine qui veut recevoir des paquets en diffusion
doit joindre un groupe multicast
Un groupe Multicast est spécifié par une adresse IP
to
de
239.255.255.255) et par un numéro de port,
classe D (comprise
224.0.0.1
entre
Remarques :
Pour diffuser, il n'est pas nécessaire de faire partie du
groupe de diffusion.
Les applets ne sont pas autorisées à utiliser les sockets
Multicast
8
DIFFUSION : SYNTAXE
Le protocole de diffusion s'appuie sur UDP (donc
n'a pas la sécurité de TCP) et la syntaxe de
programmation est donc celle de UDP.
On utilise donc la classe DatagramPacket pour
modéliser des paquets à diffuser.
La classe qui permet la diffusion est la classe
MulticastSocket avec :
▪ le constructeur public MulticastSocket() throws
IOException pour l'envoi
▪le constructeur public MulticastSocket(int port)
throwsIOException pour la réception
On précise qu'on veut bien être une machine ayant
un numéro IP qui recevra des paquets de diffusion
en lançant dans le programme la méthode :
public void joinGroup (InetAddress mcastaddr)
throws IOException sur l'objet de classe
MulticastSocket
Pour quitter ce groupe, il suffit de lancer la
méthode public void leaveGroup (InetAddress
mcastaddr) throws IOException sur ce même
objet
9
DIFFUSION
EXEMPLE : ÉMISSION
import java.net.; import java.io.;
public class Envoi {
public static void main (String[] args)
{
try
{
// Message à diffuser
String message = "bonjour tout le monde";
// Conversion vers un tableau de byte
Advertisement
byte [] tmessage = message.getBytes();
// Construire l'adresse du groupe Multicast
InetAddress group =
InetAddress.getByName("224.0.0.1");
// Construction du paquet à envoyer
DatagramPacket d = new DatagramPacket(tmessage,
tmessage.length, group, 5000);
// Construction de la socket pour l'envoi
MulticastSocket s = new MulticastSocket ();
// Envoyer le paquet
s.send(d);
catch (IOException e){System.out.println (e); } }}
}
1
0
DIFFUSION
EXEMPLE : RÉCEPTION
import java.net.; import java.io.;
public class Reception {
public static void main(String[] args){
try {
while (true)
{
// Construire un paquet vide
byte [] tmessage = new byte [100];
DatagramPacket d = new
DatagramPacket(tmessage, tmessage.length);
// Créer un socket en attente sur le port 5000
MulticastSocket s = new MulticastSocket (5000);
// Construire l'adresse du groupe Multicast
InetAddress group =
InetAddress.getByName("224.0.0.1");
// se joindre au groupe
s.joinGroup(group);
// Réception du message
s.receive(d);
// Affichage sur écran du message reçu
String m = new String (tmessage);
System.out.println ("j'ai recu le message suivant : "+m);
}
}
catch (IOException e){System.out.println (e);}}}
EXERCICE D’APPLICATION
Exercice :
Ecrire les 2 programmes Envoi/réception
permettant à une machine de diffuser un fichier
texte à plusieurs autres machines .
11