package javacodebook.net.datagram.multicast; import java.nio.*; import java.nio.channels.DatagramChannel; import java.net.*; /** * Dieser Empfänger meldet sich an einer Gruppe an, alle Packete, * die dieser Gruppe geschickt werden, werden somit auch diesem * Empfänger zugesandt. */ public class MulticastReceiver { private static final int PORT = 5000; private static final int BUF_SIZE = 1024; public static void main(String[] args) throws Exception{ // MulticastSocket wird generiert, und am vordefinierten // Port angemeldet MulticastSocket msocket = new MulticastSocket(PORT); // MulticastSocket wird an einer Multicast-Adresse // registriert InetAddress group = InetAddress.getByName("234.0.0.1"); msocket.joinGroup(group); // der byte-Array und String fürs empfangen der Daten // wird benötigt byte[] lBuffer = new byte[BUF_SIZE]; String lMessage = null; System.out.println("Bereit zum Empfang von Daten :\n"); // Damit der Receiver nicht nur einmal Daten empfangen kann wird der // Empfangen-Mechanismus in einer Endlos-Schleife eingebaut. while(true) { // Das Empfangen der Daten funktioniert wie beim normalen // DatagramSocket DatagramPacket lPacket = new DatagramPacket(lBuffer,lBuffer.length); msocket.receive(lPacket); // Aus dem gefüllten Packet wird der Inhalt ausgelesen, und // mit Sender Daten auf der Konsole ausgegeben lMessage = new String(lPacket.getData(),0,lPacket.getLength()); System.out.println("Daten empfangen von "+ lPacket.getAddress().getHostName()+": \""+lMessage+"\""); } } } --- Neue Klasse --- package javacodebook.net.datagram.multicast; import java.net.*; /** * Dieser Sender schickt eine Nachricht an eine Multicast-Adresse. * Alle Empfänger die sich dort registrieren, können diese * Nachricht empfangen. */ public class MulticastSender { private static final int PORT = 5000; public static void main(String[] args) throws Exception{ // Ein DatagramSocket wird gebildet (es könnte auch ein // MulticastSocket verwendet werden, ist aber nicht notwendig) DatagramSocket socket = new DatagramSocket(); // Multicast-Adresse, an der sich die Empfänger registrieren // wird verwendet. InetAddress groupAddr = InetAddress.getByName("234.0.0.1"); // Message die verschickt werden soll wird festgelegt, und // in einen Byte Array umgewandelt String lMessage = "Nachricht"; byte[] lMessageByte = lMessage.getBytes(); // Ein Datagrampacket wird samt Inhalt, Information über Größe, // sowie Zieladresse erstellt DatagramPacket lPacket = new DatagramPacket(lMessageByte, lMessageByte.length,groupAddr,PORT); // Packet wird verschickt socket.send(lPacket); } }