8

我正在尝试使用核心 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 请求

感谢您的任何想法

4

2 回答 2

16

HTTP 请求以空行结束(可选地后跟请求数据,例如表单数据或文件上传),而不是 EOF。你想要这样的东西:

BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while (!(inputLine = in.readLine()).equals(""))
    System.out.println(inputLine);
in.close();
于 2012-08-16T03:41:53.433 回答
4

除了上面的答案(因为我还不能发表评论),我想补充一些像 Opera 这样的浏览器(我猜是它做了什么,或者是我的 ssl 设置,我不知道) 发送 EOF。即使不是这种情况,您也希望防止这种情况发生,以便您的服务器不会因为 NullPointerException 而崩溃。

为避免这种情况,只需将空测试添加到您的条件中,如下所示:

while ((inputLine = in.readLine()) != null && !inputLine.equals(""));
于 2016-03-23T21:28:48.543 回答