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

Java Socket 網絡編程入門與實戰

     編輯:Java 相關知識

網絡編程本質與 Java 支持

網絡編程本質是兩台計算機間的數據通訊。Java 在 java.net 包提供了簡潔的 API,其中 Socket 是核心編程接口。基本模型為客戶端-服務端:服務端在固定端口監聽,客戶端主動連接,雙方建立連接後通過 I/O 流交換數據。

服務端開發關鍵步驟

  1. 創建 ServerSocket 綁定端口(端口範圍 1024-65535,避開系統保留端口)。
  2. 調用 accept() 阻塞等待客戶端連接,返回 Socket 實例。
  3. 獲取輸入/輸出流,建立緩衝讀寫器(轉換為 Unicode 字符流)。
  4. 循環讀取客戶端數據,業務處理後回應,直到約定終止條件(如收到 "end")。
  5. 關閉流與 Socket 釋放資源。

客戶端開發關鍵步驟

  1. 創建 Socket 指定服務端 IP(可用 InetAddress.getLocalHost() 獲取本機)與端口。
  2. 同樣建立緩衝讀寫器。
  3. 從標準輸入讀取用戶輸入,發送至服務端,讀取回應並顯示。
  4. 輸入 "end" 結束循環,關閉資源。

完整代碼示例

服務端

import java.io.*;
import java.net.*;

public class MyServer {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(5678);
        Socket client = server.accept();

        BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        PrintWriter out = new PrintWriter(client.getOutputStream());

        while (true) {
            String str = in.readLine();
            System.out.println("收到: " + str);
            out.println("has receive...");
            out.flush();
            if ("end".equals(str)) break;
        }
        client.close();
    }
}

客戶端

import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) throws Exception {
        Socket server = new Socket(InetAddress.getLocalHost(), 5678);

        BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
        PrintWriter out = new PrintWriter(server.getOutputStream());
        BufferedReader console = new BufferedReader(new InputStreamReader(System.in));

        while (true) {
            String str = console.readLine();
            out.println(str);
            out.flush();
            if ("end".equals(str)) break;
            System.out.println("服務端回應: " + in.readLine());
        }
        server.close();
    }
}

進階考量

  • 字節流 vs 字符流:網絡傳輸本質是字節流,InputStreamReader/OutputStreamWriter 負責編碼轉換。
  • 緩衝機制:BufferedReader/PrintWriter 提升讀寫效率。
  • 異常處理與資源關閉:實際生產需使用 try-with-resources 確保資源釋放。
  • 並發處理:單線程服務端一次只能服務一個客戶端,生產環境需引入線程池或 NIO(java.nio.channels)實現高併發。
  • 協議設計:應用層需定義消息邊界(定長、分隔符、長度前綴等),避免粘包/半包問題。

結語

Java Socket API 封裝了 TCP 通訊細節,使網絡編程變得直觀易懂。掌握基礎模型後,可逐步擴展至多線程、NIO、Netty 等高性能框架,構建健壯的分布式系統。

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