簡體   English   中英

從Java套接字InputStream讀取請求內容始終在標頭之后掛起

[英]Reading request content from Java socket InputStream, always hangs after header

我正在嘗試使用核心Java從輸入流中讀取HTTP請求數據,使用以下代碼:

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

我收到標題很好,但客戶端只是永遠掛起,因為服務器永遠不會找到請求的“EOF”。 我該如何處理? 我已經看到了這個問題,並且大多數解決方案都涉及到類似上面的內容,但是它對我不起作用。 我嘗試使用curl和Web瀏覽器作為客戶端,只是發送一個get請求

謝謝你的任何想法

HTTP請求以空行結束(可選地后跟請求數據,如表單數據或文件上載),而不是EOF。 你想要這樣的東西:

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

除了上面的答案(因為我還沒有發表評論),我想補充一些瀏覽器,比如Opera(我猜它是做了什么,或者是我的ssl設置,我不知道)發送EOF。 即使不是這種情況,您也希望防止這種情況,以免您的服務器因NullPointerException而崩潰。

為避免這種情況,只需將null測試添加到您的條件中,如下所示:

while ((inputLine = in.readLine()) != null && !inputLine.equals(""));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM