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

Java ServerSocket 資料收發實作:多執行緒 HTTP 回聲伺服器範例

     編輯:Java 相關知識

前言

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(); } } }

執行與驗證

  1. 編譯執行 HttpEchoServer
  2. 瀏覽器訪問 https://localhost:8888
  3. 頁面顯示瀏覽器發送的所有請求頭行(User-Agent、Host、Accept 等)

關鍵點

  • 每個連接獨立執行緒處理,主執行緒持續 accept()。
  • 回應必須包含狀態行(HTTP/1.1 200 OK),否則瀏覽器視為錯誤。
  • 使用 OutputStreamWriter 寫入後 必須呼叫 flush(),確保資料立即發送。
  • 範例未驗證 HTTP 方法,GET/POST/HEAD 皆回應。

結語

掌握 ServerSocket + 執行緒 + 流讀寫 + flush() 的標準模式,是建立各類 TCP 伺服器(HTTP、聊天、遊戲)的基礎範式。

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