package javacodebook.net.datagram.receive;
import java.net.*;

/**
 * @author Benjamin Rusch
 * 
 * Dieses Programm empfängt über UDP gesendete Nachrichten, und gibt diese
 * auf der Console aus.
 */

public class UDPReceiver {
	
	// Auf diesem Port erwartet der Receiver Daten
	private static final int PORT =5000;
	// Daten kommen als Byte-Array an. Die Größe eines Arrays muss zuvor 
	// festgelegt werden
  	private static final int BUF_SIZE = 1024;
  	
  	// main-Methode
  	public static void main(String [] args) throws Exception {
  	
  		// der byte-Array mit angegebener Länge wird gebaut
   		byte[] buffer = new byte[BUF_SIZE];
   		
   		// leerer String wird gebaut
    	String message = null;
    	
    	// Ein DatagramSocket für angegebene Portnummer wird erstellt
		DatagramSocket listenerSocket = new DatagramSocket(PORT);
    	
    	System.out.println("Bereit zum Empfang von Daten:\n");
    	
    	// Damit der UDPReceiver nicht nur einmal Daten empfangen kann wird 
    	// der Empfangen-Mechanismus in einer Endlos-Schleife eingebaut.
    	while(true) {
       		// aus dem Byte-Array wird ein DatagramPacket mit fester Größe 
       		// erstellt
       		DatagramPacket packet = 
       				new DatagramPacket(buffer,buffer.length);
       		
       		// wird ein Datagram an die url von diesem Rechner gesendet, 
       		// wird das Packet mit den gesendeten Daten gefüllt.
       		listenerSocket.receive(packet);
       		
       		// Aus dem gefüllten Packet kann der Inhalt ausgelesen werden.
       		// (Anm.: Da die Referenz des byte-Array noch existiert, könnte 
       		// auch über ihn direkt der Inhalt gelesen werden) 
       		message = new String(packet.getData(),0,packet.getLength());	       	
       		
       		// Aus dem DatagramPacket können neben dem Inhalt noch 
       		// weitere Informationen ermittelt werden 
       		System.out.println("Daten empfangen von "+
    		      	packet.getAddress().getHostName()+": \""+message+"\"");          	
      	}
  	}
}
