我希望收到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();
}
}
答案 0 :(得分:4)
来自javadoc
此方法可能在等待输入扫描时阻塞
答案 1 :(得分:2)
这是一个流,因此Java无法预测输入何时何地结束。你需要指定一些“结束标记”,找到它并停止阅读。
while (sc.hasNextLine()) {
String str = sc.nextLine();
System.out.println(str);
if(str.endsWith("</HTML>")) break;
}