// chatserver4.java Use: java -cp . chatserver4

import java.net.*;
import java.io.*;
import java.util.Vector;

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

    while(true) new server4(connection.accept());
}

class server4 implements Runnable {
  Socket s;
  static Vector outVector = new Vector();
 
  server4(Socket s) { 
    this.s = s; 
    new Thread(this).start();
  }

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

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

         System.out.println("Connected");     
         while( (from=in.readLine()) != null && !from.equals("")) {
           System.out.println( from );

           for(int i=0; i<outVector.size(); i++)	
             ((PrintStream)outVector.elementAt(i)).print(from + "\r\n");
         }
         s.close();                              	
     }
     catch(IOException e) {}
     System.out.println("Disconnected");
					
     outVector.removeElement(out); 	
   }
}
// chatserver5.java Use: java -cp . chatserver5

import java.net.*;
import java.io.*;
import java.util.Vector;

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

     while(true) new server5(connection.accept());
  }
}

class server5 implements Runnable {
  Socket s;
  static Vector outVector = new Vector();
 
  server5(Socket s) { 
    this.s = s; 
    new Thread(this).start();
  }

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

    try {		
      in = new BufferedReader(
             new InputStreamReader(s.getInputStream()));
      out = new PrintStream(s.getOutputStream());
							
      synchronized(outVector) { 
          outVector.addElement(out); 
      }
      System.out.println("Connected");	
	     
      while( (from=in.readLine()) != null && !from.equals("")) {
         System.out.println( from );

         for(int i=0; i<outVector.size(); i++)	
	((PrintStream)outVector.elementAt(i)).print(from + "\r\n");
        }
	s.close();                              	
      }
      catch(IOException e) {}
      System.out.println("Disconnected");
						
      synchronized(outVector) {
      	outVector.removeElement(out); 
      }
   }
}