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

Java Socket 網路程式設計入門:從基礎通訊到多執行緒聊天室實作

     編輯:Java 程式設計入門

核心概念

Socket 是網路上兩個程式雙向通訊的端點,可發送也可接收請求。Java 提供 java.net.Socket(客戶端)與 java.net.ServerSocket(伺服器端)類別,核心在於兩個關鍵方法:

  • getInputStream():取得輸入流,讀取對方傳來的資料。
  • getOutputStream():取得輸出流,寫入要傳送給對方的資料(實為緩衝區)。

程式可對這些流進一步封裝(如 BufferedReader、PrintWriter)以便處理文字資料。

伺服器端實作步驟

  1. 建立 ServerSocket 監聽指定埠(如 9998)。
  2. 呼叫 accept() 阻塞等待客戶端連線,返回對應的 Socket。
  3. 取得輸入/輸出流並封裝。
  4. 迴圈讀取客戶端訊息(in.readLine()),處理後回應(out.println())。
  5. 通訊結束時,依序關閉輸出流、輸入流、Socket。

客戶端實作步驟

  1. 建立 Socket 連接伺服器 IP 與埠。
  2. 取得並封裝輸入/輸出流(注意:客戶端輸入流對應伺服器輸出,反之亦然)。
  3. 發送訊息、接收回應。
  4. 關閉資源。

關鍵改進:多執行緒與非阻塞收訊

1. 多執行緒伺服器

ServerSocket server = new ServerSocket(9998);
int clientId = 1;
while (true) {
    Socket incoming = server.accept();
    new ServerThread(incoming, clientId++).start(); // 每客戶一執行緒
}

ServerThread 繼承 Thread,在 run() 中處理該客戶通訊邏輯。

2. 獨立執行緒輪詢輸入流(即時收訊)

new Thread(() -> {
    try {
        while (true) {
            checkInput(); // 檢查輸入流是否有新資料
            Thread.sleep(1000); // 每秒輪詢一次
        }
    } catch (InterruptedException | IOException ex) { }
}).start();

private void checkInput() throws IOException {
    String line;
    if ((line = in.readLine()) != null) {
        displayMessage(line); // 顯示到介面
    }
}

完整伺服器程式碼骨架

public class TalkServer {
    public static void main(String[] args) {
        try {
            ServerSocket server = new ServerSocket(9998);
            int i = 1;
            while (true) {
                Socket incoming = server.accept();
                new ServerThread(incoming, i++).start();
            }
        } catch (IOException ex) { ex.printStackTrace(); }
    }
}

class ServerThread extends Thread implements ActionListener {
    // ... 包含 GUI、輸入輸出流、run() 迴圈、actionPerformed() 處理按鈕事件 ...
}

此架構支援多客戶端同時連線、雙向即時文字聊天,是網路程式設計經典入門專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved