LA PROGRAMMATION UDP

Java Programming, Networking · course

Voir tous les documents en programmation

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

3

LES MÉTHODES UTILISÉES

Pour l’envoi:

On construit un paquet qui est une instance de

java.net.DatagramPacket

Publicité

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);

// 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 {

Publicité

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 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

Publicité

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 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