import java.net.*; import java.util.*; import java.io.*; public class ChatServer{ public static void main(String[] args){ Hashtable userList = new Hashtable(); String name; DataInputStream dis; DataOutputStream dos; try{ ServerSocket ss = new ServerSocket(8999); while(true){ Socket s = ss.accept(); dis = new DataInputStream(s.getInputStream()); dos = new DataOutputStream(s.getOutputStream()); name = dis.readUTF(); userList.put(name,dos); new MyServerReader(name,dis,userList).start(); } }catch(Exception e){ e.printStackTrace(); } } } class MyServerReader extends Thread{ private String name; private DataInputStream dis; private Hashtable userList; public MyServerReader(String name,DataInputStream dis,Hashtable userList){ this.name = name; this.dis = dis; this.userList = userList; } public void run(){ String info; try{ transimitMessage(name+"in!","--Server Info--"); while(true){ info = dis.readUTF(); if(info.equals("bye")){ DataOutputStream dos = (DataOutputStream)(userList.get(name)); Thread.sleep(1000); dos.close(); dis.close(); userList.remove(name); transimitMessage(name+"out","--Server Info--"); break; }else if(info.length()>0){ transimitMessage(info,name); } } }catch(Exception e){ e.printStackTrace(); } } public void transimitMessage(String msg,String name){ Collection doses = userList.values(); DataOutputStream dos; for(Object o:doses){ dos = (DataOutputStream)o; try{ dos.writeUTF(name+":"+msg); }catch(Exception e){ e.printStackTrace(); } } } }