LA PROGRAMMATION UDP

Java Programming, Networking · course

Browse all programmation documents

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