为什么这个程序没有结束?

时间:2013-09-17 12:50:41

标签: java sockets

我希望收到HTTP响应然后关闭Socket,但它只是在页面返回后永远不会结束。我假设它与Scanner有关;为什么这个节目不会结束?

public class PingHost {
   public static void main(String[] args) throws Exception {
      Socket s = new Socket("www.google.com", 80);
      DataOutputStream out = new DataOutputStream(s.getOutputStream());
      out.writeBytes("GET / HTTP/1.1\n\n");
      Scanner sc = new Scanner(s.getInputStream());
      while (sc.hasNext())
         System.out.println(sc.nextLine());
      System.out.println("never gets to here");
      s.close();
   }
}

2 个答案:

答案 0 :(得分:4)

来自javadoc

  

此方法可能在等待输入扫描时阻塞

答案 1 :(得分:2)

这是一个流,因此Java无法预测输入何时何地结束。你需要指定一些“结束标记”,找到它并停止阅读。

while (sc.hasNextLine()) {
      String str = sc.nextLine();
      System.out.println(str);
      if(str.endsWith("</HTML>")) break;
}