2012-08-16 23 views
6

後,我試圖用Java核心,以從InputStream讀取HTTP請求數據,使用下面的代碼:讀取請求的內容,總是掛頭

BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
      String inputLine; 
      while ((inputLine = in.readLine()) != null) 
       System.out.println(inputLine); 
      in.close(); 

我收到頭不錯,但那麼客戶端會永遠掛起,因爲服務器永遠不會找到請求的「EOF」。我該如何處理?我已經看到這個問題有很多問題,並且大多數解決方案都涉及到上述內容,但它不適用於我。我同時使用捲曲和網絡瀏覽器作爲客戶端嘗試了,只是發送一個GET請求

感謝您的任何想法

+1

哪裏是你的代碼掛?是'readLine()'不返回? – 2012-08-16 03:18:38

+0

是的,當我在調試器中逐步讀取時,它只是在readLine()上卡住了 – Hoofamon 2012-08-16 03:22:45

回答

10

的HTTP請求以空行(任選隨後請求數據,如表單數據結束或文件上傳),而不是EOF。你想是這樣的:

BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
String inputLine; 
while (!(inputLine = in.readLine()).equals("")) 
    System.out.println(inputLine); 
in.close(); 
+0

作品完美,謝謝! – Hoofamon 2012-08-16 03:46:53

+0

整天都在尋找這個解決方案。像一個魅力 – sunrize920 2013-02-16 18:54:05

+0

真棒,謝謝! – tokudu 2013-05-28 21:46:22

3

除了以上(因爲我沒能尚未發表評論)的答案,我想補充一點,如Opera一些瀏覽器(我想這是它幹了什麼,或者它是我的ssl安裝程序,我不知道)發送一個EOF。即使不是這種情況,您希望阻止這種情況,以便服務器不因NullPointerException而崩潰。

爲了避免這種情況,只需添加空測試,以你的條件,如:

while ((inputLine = in.readLine()) != null && !inputLine.equals("")); 
相關問題