2012-08-16 45 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(""));