我根本不是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);
}
Run Code Online (Sandbox Code Playgroud)
我得到一个空白行,一个0和另一个空白行,然后下一个in.readLine()永远挂起,而不是在HTML的结尾处完成.为什么?哪里是我的空?
我试过out.close()看看是否有Yahoo! 正在做一个持久的http会话或其他东西(我不认为没有我们愿意这样做的标题).
我在网上找到的所有Java套接字示例似乎都表明while循环是正确的形式.我只是不知道足够的Java来调试这个.
您的问题是内容编码"chunked".当在响应开始时不知道从Web服务器请求的内容的长度时使用此方法.它基本上由发送的字节数CRLF,后跟字节组成.响应的结束由您看到的确切顺序发出信号.Web服务器现在正在等待您的下一个请求(这也称为"请求管道传输").
你有几种可能性:
所以你正在从套接字中读取(你没有在你的代码中显示它,但这是我从文本中收集的内容)?
只要另一方没有关闭连接,Java就不知道它在输入的末尾,所以readLine()等待另一方发送更多数据而不返回null.