Socket(套接字)是網路通訊的端點抽象,封裝 TCP/IP 協定,包含五大要素:
應用層透過 Socket 介面與傳輸層交互,實現多進程/多連線並發服務。簡單說:Socket = TCP/IP 協定的程式化封裝。
Socket socket = new Socket("192.168.1.100", 5000); // 目標 IP + Port
PrintStream out = new PrintStream(socket.getOutputStream());
out.println("Hello Server"); // 自動換行,適合文字協定
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String response = in.readLine(); // 逐行讀取
socket.close(); // 釋放資源,務必在 finally 區塊執行
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 框架)以支援高併發。
AndroidManifest.xml 加入 <uses-permission android:name="android.permission.INTERNET"/>。AsyncTask、IntentService 或協程。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,專注業務邏輯。