帮我写一个简单的聊天室啊 socket,多线程,
刚发错地方了 昏死

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【yaoqing123】截止到2008-07-20 01:05:00的历史汇总数据(不包括此帖):
    发帖的总数量:2                        发帖的总分数:160                      每贴平均分数:80                       
    回帖的总数量:2                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:1                        结贴的总分数:100                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:60                       
    结贴的百分比:50.00 %               结分的百分比:62.50 %                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    楼主加油
      

  2.   

    找了半天
    你看满意不?
    import java.io.*;
    import java.net.*;
    import java.util.*;
    public class ChatServer {
    public static void main(String args[]) {
    Hashtable<String,DataOutputStream> userList = new Hashtable<String,DataOutputStream>(); 
    String name;
    DataInputStream dis;
    DataOutputStream dos;
    try{
    ServerSocket ss = new ServerSocket(9999);
    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<String,DataOutputStream> userList;
    public MyServerReader(String name,DataInputStream dis,Hashtable<String,DataOutputStream> userList ){
    this.name = name;
    this.dis = dis;
    this.userList = userList;
    }
    public void run(){
    String info;
    try{
    transmitMessage(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);
    transmitMessage(name + " out!","--Server Info--");
    break;
    }else if(info.length()>0){
    transmitMessage(info,name);
    }
    }
    }catch (Exception e) {
    }

    public void transmitMessage(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){
    }
    }
    }
    }