Les datagrammes UDP 

Pour utiliser le protocole de transport UDP, il est nécessaire en Java de manipuler deux classes DatagramPacket et DatagramSocket


La classe DatagramPacket

Cette classe permet de créer des objets qui contiendront les données envoyées ou reçues ainsi que l'adresse de destination ou de provenance du datagramme.

Deux constructeurs sont disponibles, un pour les paquets à recevoir, l'autre pour les paquets à envoyer.

Des méthodes sont disponibles pour manipuler de tels objets :


La classe DatagramSocket

Cette classe permet de créer des sockets UDP qui permettent d'envoyer et de recevoir des datagrammes UDP.

Avant toute communication en mode UDP il est nécessaire de créer une socket aussi bien du coté client que du coté serveur. Pour cela Java propose trois constructeurs :

Une fois la socket (objet de type DatagramSocket) créée et attachée à un port
particulier de la machine locale, il est possible d'envoyer et de recevoir des datagrammes,
via cette socket, au moyen des méthodes suivantes : Il est possible de spécifier un délai d'attente maximal en reception. Pour cela, il faut positionner une variable de timeout sur la socket au moyen de la méthode : D'autres méthodes sont disponibles pour manipuler ces sockets : Exemple :

Dans cet exemple nous créons deux classes :


import java.io.*; 
import java.net.*;

class ServeurEcho 
{ 
  final static int port = 8532; 
  final static int taille = 1024; 
  final static byte buffer[] = new byte[taille];

  public static void main(String argv[]) throws Exception 
    { 
      DatagramSocket socket = new DatagramSocket(port); 
      while(true) 
      { 
        DatagramPacket data = new DatagramPacket(buffer,buffer.length); 
        socket.receive(data); 
        System.out.println(data.getAddress()); 
        socket.send(data); 
      } 
    } 
}

import java.io.*; 
import java.net.*;


public class ClientEcho 
{ 
  final static int taille = 1024; 
  final static byte buffer[] = new byte[taille];

  public static void main(String argv[]) throws Exception 
    { 
      InetAddress serveur = InetAddress.getByName(argv[0]); 
      int length = argv[1].length(); 
      byte buffer[] = argv[1].getBytes(); 
      DatagramPacket dataSent = new DatagramPacket(buffer,length,serveur,ServeurEcho.port); 
      DatagramSocket socket = new DatagramSocket(); 
  
      socket.send(dataSent); 

      DatagramPacket dataRecieved = new DatagramPacket(new byte[length],length); 
      socket.receive(dataRecieved); 
      System.out.println("Data recieved : " + new String(dataRecieved.getData())); 
      System.out.println("From : " + dataRecieved.getAddress() + ":" + dataRecieved.getPort()); 
    } 
}