用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

多用户在线聊天服务端

2014-03-05 作者: 云代码会员举报

[java]代码库

import java.net.*;
import java.util.*;
import java.io.*;
 
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(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<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{
            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();
            }
        }
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...