⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatserver.java

📁 如果在你电脑运行了 服务器.jar 你就不用输入IP地址。 否则必须输入运行了服务器端的主机的IP地址 如果是在远程机(192.168.2.100)上运行了服务器端
💻 JAVA
字号:
import java.net.*;
import java.io.*;
import java.util.*;

public class ChatServer{
  ServerSocket server;
  Socket client;
  
  InputStream in;
  
  OutputStream out;
  
  String msg,name;
  Vector v;
  ArrayList names;
  int i;
  Date d;
  
  public ChatServer(){
    v = new Vector();
    names = new ArrayList();
    try{
      server = new ServerSocket(8787);
      System.out.println ("Server started");
      while(true){
        client = server.accept();  
    //    System.out.println ("目前本聊天室共 "+i+" 人在线");
        in = client.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        name = br.readLine();
        out = client.getOutputStream();
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(out),true);
        if(delName(names,name,"reName")){	//判断是否重复登录
      //  	delName(names,name,"reName"));
	    	pw.println("1r2e3N4a5m6e7");
        	continue;
        }
        names.add(name);
        i++;
        pw.println(name+",欢迎您,您是本聊天室第 "+i+" 位聊客。祝您愉快!");
        v.add(pw);
        d = new Date();
        for (int i = 0; i<v.size(); i++){
          if(v.size() > 1){ //因为第一个进来的是本人,所以下面那句话不发送回去
            pw = (PrintWriter)v.get(i);
	        pw.println(getNames(names)+"|"+v.size()); //把所有的人名和总人数发送回去
            if((i+1)>=v.size()){  //因为第v.size()-2个是本人,所以上面那句话不发送回去
              continue;
            }
            pw.println(name+"迈着轻快的步子进入了夜半聊天室!"+"\t\t\t"+d.toString());
         }
        }
        ThreadS ts = new ThreadS(br);
        ts.start();
      }
    }
    catch(Exception e){
      System.out.println ("服务器已经启动或者客户机连接不上!");
      e.printStackTrace();
    }
  }
  
  public String getNames(Collection c){//把名字列表列成一个字符串
    String n="";
    Iterator it = c.iterator();
    while(it.hasNext()){
       n +="|"+it.next();
    }
    return n;
  }
   
  public boolean delName(Collection c,String name,String temp){	//有人退出后执行     也可用来判断用户是否重复登录
    Iterator it = c.iterator();
    PrintWriter pw;
    int k=-1;
    boolean judge = false;
    while(it.hasNext()){
      k++;
    //  System.out.println (it.next());
      if(name.equals(it.next())){
	    if(temp.equals("closed")){
	    	judge = false;
	        it.remove();
	      //  System.out.println (k);
	        v.remove(k);
	        break;
	    }
	    if(temp.equals("reName")){
	    	judge = true;
	    	return true;
	    }
      }
    }
    
    for (int i = 0; i<v.size(); i++){
       pw = (PrintWriter)v.get(i);
       pw.println(getNames(c)+"|"+v.size()); //把所有的人名和总人数发送回去
    }
    return judge;
  } 
  
  class ThreadS extends Thread{
    private PrintWriter pw;
    private BufferedReader br;
    public ThreadS(BufferedReader br){    //如果不传参数br进来,服务器只能读最后连上来的客户机的数据
      this.br = br;
    }
    public void run(){
      try{
        boolean b=false;
        while(true){
          msg = br.readLine();
          d = new Date();
          StringTokenizer st = new StringTokenizer(msg,";");
          while(st.hasMoreTokens()){
            if(st.nextToken().equals("1C2l3o4s5e")){
               b = true;
               msg = st.nextToken();
               delName(names,msg,"closed"); //把列表中的名字删除掉
               break;
            }
          }
          for (int i = 0; i<v.size(); i++){
            if(b){
                msg=msg+" 依依不舍地离开了夜半聊天室!" ;
                //continue;
              // break;
                b = false;
                pw = (PrintWriter)v.get(i);
                pw.println(msg+"\t\t\t"+d.toString());      
            }
            else{
                pw = (PrintWriter)v.get(i);
                pw.println(msg+"\t\t\t"+d.toString());      
            }
          }
          System.out.println(msg+"\t\t\t"+d.toString());
        }
      }
      catch(Exception e){
       // pw.println("一位聊友偷偷地离开了本聊天室!");
     //   System.out.println ("某一客户机不正常常关闭!");
      }
    }
  }
  
  public static void main(String[] args){
    new ChatServer();
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -