从Java套接字InputStream读取请求内容始终在标头之后挂起

时间:2012-08-16 03:16:38

标签: java

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

感谢您的任何想法

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:4)

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

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

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