// chatserver2.java Use: java -cp . chatserver2

import java.net.*;
import java.io.*;

class chatserver2 {
  public static void main(String args[]) throws Exception {
     ServerSocket connection = new ServerSocket( 888 );

     while(true) new server1(connection.accept()).run();
  }
}

class server1 {
   Socket s;
 
   server1(Socket s) { 
	this.s = s; 
   }

   public void run() {
      String from;
      BufferedReader in=null;
      PrintStream    out=null;

      try {							
       	in = new BufferedReader(
               new InputStreamReader(s.getInputStream()));
	out = new PrintStream(s.getOutputStream());

       	System.out.println("Connected");
       	while( (from=in.readLine()) != null && 
                !from.equals("")) {
	     System.out.println( from );
	     out.print(from + "\r\n");
       	}
	s.close();                              	
      }
      catch(IOException e) {}
      System.out.println("Disconnected");
   }
}
// chatserver3.java Use: java -cp . chatserver3

import java.net.*;
import java.io.*;

class chatserver3 {
  public static void main(String args[]) throws Exception {
     ServerSocket connection = new ServerSocket( 888 );
                 // Start separate thread for each
     while(true) new server3(connection.accept());
  }
}

class server3 implements Runnable { // Threaded class
  Socket s;
 
  server3(Socket s) { 
     this.s = s; 
     new Thread(this).start();      // start() invokes run() 
  }

// run() is unchanged