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

Java Socket 網路程式設計:從單執行緒到多執行緒伺服器的完整演進

     編輯:Java 程式設計入門

網路程式設計本質上是兩台電腦的資料交換。Java 在 java.net 套件提供簡潔 API,搭配 java.io 處理資料流,讓開發者能輕鬆實作 Client-Server 模型。

基礎架構:ServerSocket 與 Socket

  • 伺服端:使用 ServerSocket 綁定埠號(>1024),調用 accept() 等待連線,建立專屬 Socket 通道。
  • 客戶端:透過 Socket 指定伺服器 IP 与埠號發起連線,InetAddress 協助解析位址。

雙方透過 getInputStream()、getOutputStream() 取得位元組流,再包裝為 BufferedReader/PrintWriter 處理文字資料。

單執行緒限制與多執行緒突破

初版伺服器單執行緒循環處理請求,同一時間僅能服務一個客戶。改進方向:

  1. 外層循環接受連線:while(true){ Socket client = server.accept(); ... },但仍為循序處理,客戶需排隊。
  2. 引入執行緒並行:每個連線派生一條執行緒(繼承 Thread 或實作 Runnable),將通訊邏輯移入 run(),主執行緒僅負責 accept() 與 start(),實現真正並發服務。

關鍵程式碼片段(多執行緒伺服器)

public class MultiUser extends Thread {
    private Socket client;
    public MultiUser(Socket c) { this.client = c; }
    public void run() {
        try (BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
             PrintWriter out = new PrintWriter(client.getOutputStream())) {
            String str;
            while ((str = in.readLine()) != null) {
                System.out.println(str);
                out.println("has receive...."); out.flush();
                if (str.equals("end")) break;
            }
        } catch (IOException e) { /* 處理異常 */ }
        finally { try { client.close(); } catch (IOException ignored) {} }
    }
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(5678);
        while (true) new MultiUser(server.accept()).start();
    }
}

此架構下,每個客戶擁有獨立執行緒與通訊管道,互不阻塞,充分發揚多核優勢。

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