首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 多線程實現聊天室:客戶端與服務端完整代碼

     編輯:Java 相關知識

核心技術點

  • Swing GUI 程式設計與事件監聽
  • Socket 網絡通訊(ServerSocket、Socket)
  • 多線程併發處理

客戶端關鍵邏輯

// 連接服務器
Socket socket = new Socket(serverIP, serverPort);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream());

// 接收消息線程
new Thread(() -> {
    String msg;
    while ((msg = reader.readLine()) != null) {
        textArea.append(msg + "\n");
    }
}).start();

// 發送消息
writer.println(nickname + ":" + content);
writer.flush();

服務端關鍵邏輯

ServerSocket server = new ServerSocket(port);
List<PrintWriter> clients = new ArrayList<>();

while (true) {
    Socket client = server.accept();
    PrintWriter writer = new PrintWriter(client.getOutputStream());
    clients.add(writer);
    new Thread(new ClientHandler(client, clients)).start();
}

// 廣播消息
void broadcast(String msg) {
    for (PrintWriter w : clients) {
        w.println(msg);
        w.flush();
    }
}

ClientHandler 內部類

class ClientHandler implements Runnable {
    private BufferedReader reader;
    private List<PrintWriter> allWriters;

    public void run() {
        String msg;
        while ((msg = reader.readLine()) != null) {
            broadcast(msg);  // 轉發給所有客戶端
        }
    }
}

界面截圖說明

客戶端/服務端均包含:連接區、消息顯示區(JScrollPane+JTextArea)、輸入區、昵稱設置。

擴展建議

  • 加入用戶上下線通知
  • 支持私聊(Map<String, PrintWriter> 維護昵稱映射)
  • 引入 JSON 協議擴展消息類型(圖片、文件、表情)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved