我完全不是一名Java程序员。实际上,我尽量避免使用它,但是在课堂上必须使用它(从学校的角度来看)。老师要求我们使用Socket()、BufferedReader()、PrintWriter()和其他各种东西,包括BufferedReader()的readLine()方法。
基本上,我遇到的问题是这样的。文档明确说明readLine应该在输入流的末尾返回null,但实际情况并非如此。
Socket link = new Socket(this.address, 80);
BufferedReader in = new BufferedReader( new InputStreamReader( link.getInputStream() ));
PrintWriter out = new PrintWriter( new PrintWriter( link.getOutputStream(), true ));
out.print("GET blah blah blah"); // http request by hand
out.flush(); // send the get please
while( (s=in.readLine()) != null ) {
// prints the html correctly, hooray!!
System.out.println(s);
}
我不是在HTML的末尾结束,而是得到了一个空行、一个0和另一个空行,然后下一个in.readLine()就永远挂起了。为什么?我的null在哪里?
我尝试使用out.close()来查看是否可能是Yahoo!正在执行持续的http会话或其他操作(我认为如果没有我们愿意执行的头文件,它不会这样做)。
我在网上找到的所有Java套接字示例都表明while循环是正确的形式。我只是不了解足够的Java来调试这个问题。