ServerSocket.accept() 回傳的 Socket 提供 getInputStream()/getOutputStream() 進行雙向通訊。本文實作一個多執行緒 HTTP 回聲伺服器,接收請求頭並以 HTML 形式回傳,示範伺服器端讀寫流的標準用法。
public class HttpEchoServer extends Thread {
private Socket socket;
public void run() {
try {
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
BufferedReader br = new BufferedReader(isr);
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
osw.write("HTTP/1.1 200 OK\r\n\r\n");
String s = "";
while (!(s = br.readLine()).equals(""))
osw.write("" + s + "
");
osw.flush(); // 必須 flush 發送緩衝區
socket.close();
} catch (Exception e) {}
}
public HttpEchoServer(Socket socket) { this.socket = socket; }
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("伺服器已啟動,端口:8888");
while (true) {
Socket socket = serverSocket.accept();
new HttpEchoServer(socket).start();
}
}
}
HttpEchoServerhttps://localhost:8888accept()。HTTP/1.1 200 OK),否則瀏覽器視為錯誤。OutputStreamWriter 寫入後 必須呼叫 flush(),確保資料立即發送。掌握 ServerSocket + 執行緒 + 流讀寫 + flush() 的標準模式,是建立各類 TCP 伺服器(HTTP、聊天、遊戲)的基礎範式。