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

Android Socket 通訊實作指南:從原理到程式碼

     編輯:Java 程式設計入門

一、Socket 通訊核心概念

Socket(套接字)是網路通訊的端點抽象,封裝 TCP/IP 協定,包含五大要素:

  1. 傳輸協定(TCP/UDP)
  2. 本地 IP 位址
  3. 本地通訊埠
  4. 遠端 IP 位址
  5. 遠端通訊埠

應用層透過 Socket 介面與傳輸層交互,實現多進程/多連線並發服務。簡單說:Socket = TCP/IP 協定的程式化封裝。

二、Client 端實作步驟

2.1 建立連線

Socket socket = new Socket("192.168.1.100", 5000); // 目標 IP + Port

2.2 發送資料

PrintStream out = new PrintStream(socket.getOutputStream());
out.println("Hello Server"); // 自動換行,適合文字協定

2.3 接收回應

BufferedReader in = new BufferedReader(
    new InputStreamReader(socket.getInputStream()));
String response = in.readLine(); // 逐行讀取

2.4 關閉連線

socket.close(); // 釋放資源,務必在 finally 區塊執行

三、Server 端單執行緒範例

ServerSocket server = new ServerSocket(8888);
System.out.println("伺服器啟動,監聽 8888...");

Socket client = server.accept(); // 阻塞等待連線
PrintStream out = new PrintStream(client.getOutputStream());
out.println("Hello Client");     // 回應訊息

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

注意:此為單執行緒阻塞模型,實際生產環境必須採用多執行緒或非阻塞 NIO(如 ExecutorService + 執行緒池、Netty 框架)以支援高併發。

四、Android 專屬注意事項

  1. 網路權限:AndroidManifest.xml 加入 <uses-permission android:name="android.permission.INTERNET"/>。
  2. 主執行緒禁網:Android 4.0+ 嚴禁在 UI 執行緒進行網路操作,必須放入子執行緒、AsyncTask、IntentService 或協程。
  3. 生命週期管理:Activity 銷毀時務必關閉 Socket,避免洩漏。
  4. 斷線重連:生產級需實作心跳檢測與指數退避重連機制。

五、完整 Client 範例(含執行緒)

new Thread(() -> {
    try (Socket socket = new Socket("10.0.2.2", 5000);
         PrintStream out = new PrintStream(socket.getOutputStream());
         BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {

        out.println("GET_TIME");
        String serverTime = in.readLine();

        runOnUiThread(() -> textView.setText("Server: " + serverTime));
    } catch (IOException e) {
        e.printStackTrace();
    }
}).start();

六、總結

Socket 是網路程式設計的基石。Android 開發者需掌握:基本 API、執行緒模型、權限配置、異常處理與連線池優化。建議實務專案直接採用成熟框架(OkHttp、Netty、gRPC)而非手寫底層 Socket,專注業務邏輯。

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