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

📄 chatserver.java

📁 共同研究
💻 JAVA
字号:
//ChatServer.java
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer{
  public static final int PORT = 8080;
  public static ArrayList socketList = new ArrayList();
  public static ArrayList OnLineUserName = new ArrayList();
  public static void main(String args[])throws IOException{
    ServerSocket server = new ServerSocket(PORT);
    System.out.println("服务器已经启动了(Server Started.....)");
    System.out.println("本机IP地址为:" + InetAddress.getLocalHost().getHostAddress() + "  "+"端口为:"+ PORT);
    try{
       try{
         while(true){
           Socket socket = server.accept();
           System.out.println("有人上线了(have people OnLine)");
           new ChatClientThread(socket);
         }
                        
       }catch(Exception ex){ }
    }finally{
      server.close();
    }
  }
}
class ChatClientThread extends Thread{
  Socket socket;
  BufferedReader input;
  PrintWriter output;
  public ChatClientThread(Socket s){
    socket = s;
    ChatServer.socketList.add(socket);
    try{
      input = new BufferedReader(new InputStreamReader(socket.getInputStream()));//从客户端读入消息
      output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));//向客户端发送消息
    }catch(IOException e){

   }
    start();
  }
  public synchronized void run(){
    try{
      String name;
      /*for(int i = 0; i < ChatServer.socketList.size(); i++){
        PrintWriter allLoginUserName = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
        allLoginUserName.println(ChatServer.OnLineUserName.get(i));
       }*/
      name = input.readLine();
      System.out.println(name);
      for(int i = 0;i < ChatServer.OnLineUserName.size();i++){
         output.println("^userName^" + "\t" + ChatServer.OnLineUserName.get(i));
         output.flush();
      } 
      ChatServer.OnLineUserName.add(name);
      for(int i = 0;i < ChatServer.socketList.size();i++){
         PrintWriter output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(((Socket)ChatServer.socketList.get(i)).getOutputStream())),true);
         output.println("^userName^" + "\t" + name);      
         output.flush();
      }
       /* if(name.equals("Login")){
           String LoginUserName = input.readLine();
           ChatServer.OnLineUserName.add(name);
           System.out.println(name);
           ChatServer.socketList.add(socket);
           System.out.println(socket);
           for(int i = 0;i< ChatServer.socketList.size();i++){
              PrintWriter NewLoginUserName = new PrintWriter(new BufferedWriter(new OutputStreamWriter(((Socket)ChatServer.socketList.get(i)).getOutputStream())),true);
              NewLoginUserName.println(name);
            }
         }*/
      new ChatServerThread(socket);
   }catch(Exception e){ }
  }
}

class ChatServerThread extends Thread{
  private Socket socket;
  private BufferedReader input;
  private PrintWriter output;
  public ChatServerThread (Socket s)throws IOException{
    socket  = s;
    input = new BufferedReader(new InputStreamReader(socket.getInputStream()));//从客户端读入消息
    output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);//发送消息到客户端
    start();
  }
  public synchronized void run(){
    String stringClient;
    try{//
     stringClient = input.readLine();
     if(stringClient.equals("^离开^")){
       for(int i = 0;i<ChatServer.socketList.size();i++){
          if((Socket)ChatServer.socketList.get(i)== socket){
            for(int j = 0;j<ChatServer.socketList.size();j++){
               if((Socket)ChatServer.socketList.get(j) == socket)
                 break;
                PrintWriter stringClientOff = new PrintWriter(new BufferedWriter(new OutputStreamWriter(((Socket)ChatServer.socketList.get(j)).getOutputStream())),true);
                stringClientOff.println("离开的用户名");
                stringClientOff.println(ChatServer.OnLineUserName.get(i));
                System.out.println("用户已经不在"+ChatServer.OnLineUserName.get(i));
                
              }
           }
           ChatServer.socketList.remove(i);
           ChatServer.OnLineUserName.remove(i); 
           socket.close();
        } 
     }
     else{
       for(int i = 0;i < ChatServer.socketList.size();i++){
       // if((Socket)ChatServer.socketList.get(i) == socket)
        //  break;
         PrintWriter output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(((Socket)ChatServer.socketList.get(i)).getOutputStream())),true);
         output.println(stringClient); 
         output.flush();
         
        }
     }
  }catch(Exception e){ }//        
   try{
     stringClient = input.readLine();
     while(true){
       if(stringClient.length()!=0){
         for(int i = 0;i<ChatServer.socketList.size();i++){
            PrintWriter output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(((Socket)ChatServer.socketList.get(i)).getOutputStream())),true);
            output.println(stringClient);
            output.flush();
         }
        System.out.println("Echoing :" + stringClient);
          
      }
      stringClient = input.readLine();
     }  
   }catch(IOException ex){}
 }          
           
}

              

⌨️ 快捷键说明

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