import java.io.*; 
import java.net.*; 
class TCPClientTelnet { 

  public static void main(String args[]) throws Exception 
  { 
    String str, mstr; 

    BufferedReader inFromUser = 
      new BufferedReader(new InputStreamReader( System.in));

    String host = args[0];   
    int port = Integer.parseInt( args[1]);      
    Socket clientSocket = new Socket( host, port); 

    DataOutputStream outToServer = 
      new DataOutputStream( clientSocket.getOutputStream()); 
    BufferedReader inFromServer = 
      new BufferedReader(new InputStreamReader( clientSocket.getInputStream())); 

    while (true) {
      if (inFromUser.ready() ) {
          // gelesen wird ein String (Zeilenabschluss unterdrückt)
          str = inFromUser.readLine();     
          // null -> Referenztyp bei Streamende
          if (str == null) {System.out.println("Console closed");break;}  
          // Schreibt in Stream des Servers, u.U. ist der Stream nicht mehr verfügbar
          outToServer.writeBytes( str + "\r\n");  // ergänze CR+LF
          outToServer.flush();
          System.out.println("To Server: " + str  );
      }

      // Prüfung auf zum Lesen verfügbare Zeichen im Stream vom Server
      while ( inFromServer.ready() ) {          
        System.out.println("Server buffer filled...");
        mstr = inFromServer.readLine(); 
        if (mstr == null) System.out.println("Server closed");
        System.out.println("FROM SERVER: " + mstr); 
      }          
    }
    clientSocket.close();
    System.out.println("Program terminated");
    
    // Ctrl + D -> Terminierung Stream
    // while((str=input.readLine()) != null)
    // BufferedReader,ready sollte eigentlich true sein bei nichtblockierendem read()
    // scheint aber nur bei readline true zu geben bei System.in
    // Problem ist Stream: System.in -> wartet auf LF
    //
    //  int d = System.in.read();
    //  System.out.println("Ausgabe: " + (char)  d);
    //  int c = inFromUser.read();
    //  System.out.println("Ausgabe: " + (char)  c);
  } 
} 
