package javacodebook.net.datagram.multicast;

import java.nio.*;
import java.nio.channels.DatagramChannel;
import java.net.*;
/**
 * @author benjamin_rusch
 *
 * 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+"\"");
    	}            
	}
}
