package javacodebook.net.socket.simpleserver;
import java.io.*;
import java.net.*;

/**
 * @author Benjamin Rusch
 * 
 * Dieses Program empfängt eine über TCP gesendete Nachricht, falls 
 * diese dem String "datum" entspricht, wird dem Sender das Datum 
 * übermittelt, sonst bekommt er eine Fehlermeldung.
 */

public class TCPServer 
{
    public static void main(String args[])
    {
       
        try {
        	// Ein ServerSocket wird auf Port 5000 angemeldet
            ServerSocket servSock = new ServerSocket(5000);        
            
            System.out.println("Warte auf Verbindung...");      
                                              
            // Durch accept() wird der Server in Warteposition gebracht. In 
            // dieser Methode verweilt er, bis ein Client auf diesem Port ein 
            // Request abgibt. erst dann wird das Socket Objekt, welches eine 
            // Repräsentation des Clients darstellt, zurückgegeben.
            Socket client = servSock.accept();
            
            // getInetAddress() liefert die IP-Addresse des Clients
            System.out.println("Client verbunden von " 
            		+ client.getInetAddress());   
            
            // Der InputStream vom Socket wird referenziert, und an einen 
            // BufferedReader weitergeleitet. So können Client-Meldungen 
            // leicht ausgelesen werden.
		  	BufferedReader clientIn = new BufferedReader( 
		  			new InputStreamReader(client.getInputStream()));
		  	
		  	// Ein PrintWriter leitet sämtliche Eingaben, an den 
		  	// Outputstream des Clients weiter. Über Ihn können komfortabel 
		  	// Meldungen an den Client übertragen werden.
		  	PrintWriter clientOut = new PrintWriter(
		  			client.getOutputStream(),true);
		  	
		  	// Zeile vom Client wird ausgelesen.
		  	String input = clientIn.readLine();
		  	
		  	// Falls die Zeile dem String "datum" entspricht wird dem Client 
		  	// das Datum übermittelt, sonst bekommt er eine Fehler Meldung.
		  	if(input.equals("date")) {
		  		clientOut.print("Hallo "+client.getInetAddress());
		  		clientOut.println(". Das Datum im Java Format: " 
		  				+ new java.util.Date());
		  	}
			else {
				clientOut.println("Sorry, "+input+" ist falscher Befehl!");
			}		  	       
        }
        catch(Exception e) {
            System.out.println("Netzfehler!");
        }
    }
    
}