Socket 是網路上兩個程式雙向通訊的端點,可發送也可接收請求。Java 提供 java.net.Socket(客戶端)與 java.net.ServerSocket(伺服器端)類別,核心在於兩個關鍵方法:
getInputStream():取得輸入流,讀取對方傳來的資料。getOutputStream():取得輸出流,寫入要傳送給對方的資料(實為緩衝區)。程式可對這些流進一步封裝(如 BufferedReader、PrintWriter)以便處理文字資料。
ServerSocket 監聽指定埠(如 9998)。accept() 阻塞等待客戶端連線,返回對應的 Socket。in.readLine()),處理後回應(out.println())。Socket 連接伺服器 IP 與埠。ServerSocket server = new ServerSocket(9998);
int clientId = 1;
while (true) {
Socket incoming = server.accept();
new ServerThread(incoming, clientId++).start(); // 每客戶一執行緒
}
ServerThread 繼承 Thread,在 run() 中處理該客戶通訊邏輯。
new Thread(() -> {
try {
while (true) {
checkInput(); // 檢查輸入流是否有新資料
Thread.sleep(1000); // 每秒輪詢一次
}
} catch (InterruptedException | IOException ex) { }
}).start();
private void checkInput() throws IOException {
String line;
if ((line = in.readLine()) != null) {
displayMessage(line); // 顯示到介面
}
}
public class TalkServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(9998);
int i = 1;
while (true) {
Socket incoming = server.accept();
new ServerThread(incoming, i++).start();
}
} catch (IOException ex) { ex.printStackTrace(); }
}
}
class ServerThread extends Thread implements ActionListener {
// ... 包含 GUI、輸入輸出流、run() 迴圈、actionPerformed() 處理按鈕事件 ...
}
此架構支援多客戶端同時連線、雙向即時文字聊天,是網路程式設計經典入門專案。