本文通過完整代碼示範 Java 基於 Socket / ServerSocket 實現客戶端與服務端的雙向文本通訊,涵蓋流處理、緩衝、編碼轉換關鍵技術點。
| 類別 | 套件 | 用途 |
|---|---|---|
ServerSocket | java.net | 服務端監聽指定埠,accept() 阻塞等待客戶端連接 |
Socket | java.net | 雙端通訊端點,提供 InputStream/OutputStream |
BufferedReader/Writer | java.io | 字符流緩衝,支援 readLine() 按行讀取 |
InputStreamReader/OutputStreamWriter | java.io | 位元組流↔字符流轉換橋樑,指定編碼 (UTF-8) |
PrintWriter | java.io | 便利列印方法,println() 自動換行並 flush |
public class Server1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try (ServerSocket server = new ServerSocket(9880)) {
while (true) {
Socket client = server.accept();
System.out.println("客戶端連接:" + client.getInetAddress().getHostAddress());
// 發送訊息給客戶端
OutputStream os = client.getOutputStream();
PrintWriter pw = new PrintWriter(
new BufferedWriter(new OutputStreamWriter(os, "UTF-8")), true);
System.out.print("我說:");
String serverMsg = input.nextLine();
pw.println(serverMsg); // auto flush
// 接收客戶端訊息
InputStream is = client.getInputStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, "UTF-8"));
String msg = reader.readLine();
System.out.println("客戶端說:" + msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Client1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
try (Socket client = new Socket("127.0.0.1", 9880)) {
// 接收服務端訊息
BufferedReader reader = new BufferedReader(
new InputStreamReader(client.getInputStream(), "UTF-8"));
String msg = reader.readLine();
System.out.println("服務端說:" + msg);
// 發送訊息給服務端
PrintWriter pw = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(client.getOutputStream(), "UTF-8")), true);
System.out.print("我說:");
String clientMsg = input.nextLine();
pw.println(clientMsg); // auto flush
} catch (IOException e) {
e.printStackTrace();
}
}
}
readLine() / println() 以換行符作為訊息邊界,簡化應用層協議設計。PrintWriter 建構子第二參數 true 開啟自動刷新,確保訊息即時發送。

ExecutorService + 執行緒池)SSLSocketFactory)本文代碼已包含完整包結構與導入語句,可直接複製至 IDE 運行。建議先啟動 Server,再啟動 Client 進行測試。