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

Android Socket 通信完全指南:從原理到客戶端/服務端實戰代碼

     編輯:Java 相關知識

Socket 通信核心概念

Socket(套接字)是網絡通信的基石,封裝了 TCP/IP 協議族,提供應用層與傳輸層的交互接口。每個 Socket 包含五大要素:協議、本地 IP、本地端口、遠程 IP、遠程端口,唯一標識一個網絡通信端點。

通過 Socket 接口,多個應用進程可共享同一 TCP 端口實現並發通信,操作系統負責區分不同連接的數據流。

客戶端實現四步驟

1. 建立連接

Socket client = new Socket("localhost", 5000);

指定服務端 IP 和端口,發起 TCP 三次握手。

2. 發送數據

PrintStream out = new PrintStream(socket.getOutputStream());
out.println("Hello Server");

PrintStream 提供便捷的行級發送,自動處理換行符。

3. 接收響應

BufferedReader buf = new BufferedReader(
    new InputStreamReader(socket.getInputStream()));
String response = buf.readLine();

使用緩衝讀取器高效讀取文本數據。

4. 關閉連接

socket.close();

釋放端口、緩衝區等系統資源,發起 TCP 四次揮手。

服務端實現(單線程版)

ServerSocket server = new ServerSocket(8888);
System.out.println("服務器運行,等待客戶端連接...");
Socket client = server.accept(); // 阻塞等待

PrintStream out = new PrintStream(client.getOutputStream());
out.println("helloworld"); // 發送響應

client.close();
server.close();

關鍵點:accept() 會阻塞直到有客戶端連接,返回的 Socket 專門用於與該客戶端通信。

生產環境必備增強

  • 多線程/線程池:主線程循環 accept(),每個客戶端分配工作線程
  • 異常處理:捕獲 IOException,確保流與 Socket 正確關閉
  • 心跳機制:長連接需定期發送心跳包檢測連接存活
  • 協議設計:定義消息頭(長度/類型)、消息體,解決粘包/拆包問題
  • 安全傳輸:敏感數據使用 SSLSocket 加密

Android 特有注意事項

  1. 網絡權限:<uses-permission android:name="android.permission.INTERNET" />
  2. 主線程禁網:必須在子線程(Thread、Executor、Coroutine)中進行 Socket 操作
  3. 生命周期管理:Activity/Service 銷毀時及時關閉 Socket,避免洩漏
  4. 網絡狀態監聽:動態適配 WiFi/4G/5G 切換,實現斷線重連

掌握 Socket 通信是移動端即時消息、物聯網控制、文件傳輸等功能的基礎。建議進一步學習 Netty、OkIO 等高性能網絡框架,提升開發效率與系統穩定性。

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