Gestion multidiffusion (multicast)
Les datagrammes en multidiffusion sont pratiques pour envoyer le même message à plusieurs personnes simultannément. Cette méthode sert notamment au déploiement massif de systèmes d'exploitations dans un parc informatique ou à des outils spécialisés tels que Faronic Insight.
Dans le code, il existe beaucoup de ressemblance entre la multidiffusion et la réception d'un datagramme :
- On doit créer un groupe de multidiffusion
- On doit utiliser un
MulticastSocket
au lieu d'unDatagramSocket
- On doit joindre le groupe de multidiffusion
Tout le reste est identique.
Adresses IP de multidiffusion
Les adresses IP pour la multidiffusion utilisent des plages spéciales :
Début | Fin | Utilité |
---|---|---|
224.0.0.0 | 224.0.0.255 | Reservé pour des protocoles spéciaux |
224.0.1.0 | 238.255.255.255 | Réservé et routables sur Internet |
239.0.0.0 | 239.255.255.255 | Utilisables localement |
Pour des programmes locaux, le bloc d'adresses 239.0.0.0/8 sera idéal.
Rejoindre un groupe de multidiffusion
Un groupe de multidiffusion existe à la grandeur du réseau. Rejoindre un groupe correspond à entrer dans un local : tout le monde peut parler, tout le monde peut écouter.
Envoyer un paquet de multidiffusion
Envoyer un paquet de multidiffusion est identique à envoyer un paquet UDP. La seule différence est l'utilisation d'un MulticastSocket
plutôt que d'un DatagramSocket
:
// Préparer le message
String message = "Hello Multicast!";
DatagramPacket datagramPacket = new DatagramPacket(message.getBytes(), message.length(), inetAddress, port);
// Envoyer le datagramme via le socket de multidiffusion
multicastSocket.send(datagramPacket);
Recevoir un paquet de multidiffusion
La réception est également identique à UDP :
// Créer une mémoire tampon où mettre le message reçu
byte[] buffer = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length);
// Recevoir un maximum de 1024 octets
multicastSocket.receive(datagramPacket);
// Afficher le message
String received = new String(datagramPacket.getData(), 0, datagramPacket.getLength());
System.out.println("Received from server: " + received);