//ChatHandler.java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.util.Vector; public class ChatHandler extends Thread { static Vector handlers = new Vector( 10 ); private Socket socket; private BufferedReader in; private PrintWriter out; public ChatHandler(Socket socket) throws IOException { this.socket = socket; in = new BufferedReader( new InputStreamReader(socket.getInputStream())); out = new PrintWriter( new OutputStreamWriter(socket.getOutputStream())); } public void run() { String line; synchronized(handlers) { handlers.addElement(this); // add() not found in Vector class } try { while(!(line = in.readLine()).equalsIgnoreCase("/quit")) { for(int i = 0; i < handlers.size(); i++) { synchronized(handlers) { ChatHandler handler = (ChatHandler)handlers.elementAt(i); handler.out.println(line + "\r"); handler.out.flush(); } } } } catch(IOException ioe) { ioe.printStackTrace(); } finally { try { in.close(); out.close(); socket.close(); } catch(IOException ioe) { } finally { synchronized(handlers) { handlers.removeElement(this); } } } } }
//server file import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class ChatServer { public static final int DEFAULT_PORT = 9800; public static void main(String[] args) { int port = DEFAULT_PORT; ServerSocket serverSocket = null; Socket socket = null; try { if(args.length > 0) port = Integer.parseInt(args[0]); } catch(NumberFormatException nfe) { System.err.println("Usage: java ChatServer [port]"); System.err.println("Where options include:"); System.err.println("\tport the port on which to listen."); System.exit(0); } try { serverSocket = new ServerSocket(port); while(true) { socket = serverSocket.accept(); ChatHandler handler = new ChatHandler(socket); handler.start(); } } catch(IOException ioe) { ioe.printStackTrace(); } finally { try { serverSocket.close(); } catch(IOException ioe) { ioe.printStackTrace(); } } } }
ChatHandler
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)