[Java] 多用户在线聊天服务端 →→→→→进入此内容的聊天室

来自 , 2019-11-07, 写在 Java, 查看 145 次.
URL http://www.code666.cn/view/dd45045f
  1. import java.net.*;
  2. import java.util.*;
  3. import java.io.*;
  4.  
  5. public class ChatServer{
  6.     public static void main(String[] args){
  7.         Hashtable<String,DataOutputStream> userList = new
  8.             Hashtable<String,DataOutputStream>();
  9.         String name;
  10.         DataInputStream dis;
  11.         DataOutputStream dos;
  12.          
  13.         try{
  14.             ServerSocket ss = new ServerSocket(8999);
  15.             while(true){
  16.                 Socket s = ss.accept();
  17.                 dis = new DataInputStream(s.getInputStream());
  18.                 dos = new DataOutputStream(s.getOutputStream());
  19.                 name = dis.readUTF();
  20.                 userList.put(name,dos);
  21.                 new MyServerReader(name,dis,userList).start();
  22.             }
  23.         }catch(Exception e){
  24.             e.printStackTrace();
  25.         }
  26.     }
  27. }
  28.  
  29. class MyServerReader extends Thread{
  30.     private String name;
  31.     private DataInputStream dis;
  32.     private Hashtable<String,DataOutputStream> userList;
  33.      
  34.     public MyServerReader(String name,DataInputStream dis,Hashtable<String,DataOutputStream> userList){
  35.         this.name = name;
  36.         this.dis = dis;
  37.         this.userList = userList;
  38.     }
  39.      
  40.     public void run(){
  41.         String info;
  42.         try{
  43.             transimitMessage(name+"in!","--Server Info--");
  44.             while(true){
  45.                 info  = dis.readUTF();
  46.                 if(info.equals("bye")){
  47.                     DataOutputStream dos = (DataOutputStream)(userList.get(name));
  48.                     Thread.sleep(1000);
  49.                     dos.close();
  50.                     dis.close();
  51.                     userList.remove(name);
  52.                     transimitMessage(name+"out","--Server Info--");
  53.                     break;
  54.                 }else if(info.length()>0){
  55.                     transimitMessage(info,name);
  56.                 }
  57.             }
  58.         }catch(Exception e){
  59.             e.printStackTrace();
  60.         }
  61.     }
  62.      
  63.     public void transimitMessage(String msg,String name){
  64.         Collection doses = userList.values();
  65.         DataOutputStream dos;
  66.         for(Object o:doses){
  67.             dos = (DataOutputStream)o;
  68.             try{
  69.                 dos.writeUTF(name+":"+msg);
  70.             }catch(Exception e){
  71.                 e.printStackTrace();
  72.             }
  73.         }
  74.     }
  75. }
  76.  

回复 "多用户在线聊天服务端"

这儿你可以回复上面这条便签

captcha