我应该开发一个程序来读取具有指定URL的网页,但问题是我不允许使用任何HTTP库,我只允许使用TCP。
以下是读取响应消息的代码:
private static String readMultiline (BufferedReader inStr) {
String message="";
String line=readLine(inStr);
while (line != null) {
message += line + "\r\n";
line=readLine(inStr);
}
if (message.length() == 0) return null;
return message;
}
private static String readLine (BufferedReader inStr) {
String line = null;
try{
line = inStr.readLine();
} catch (IOException ioe) {
System.out.println("ERROR: Incoming packet could not be read properly.");
return null;
}
return line;
}
问题是标题和网页内容已完全接收,但是while循环仍然等待“下一行”,该行不存在。过了一会儿,超时发生,代码继续。我尝试连接的服务器不执行“连接:关闭”。如何检测文件的结尾?
答案 0 :(得分:3)
其他答案已删除,所以我会发布一个。您正在使用读取行信息的IO方法,其中一行被定义为由换行符终止的一组字符。但是无法保证您的TCP数据包以换行结束,因此您需要使用更不可知的IO读取来处理它们。
看看DataInputStream,它有一个名为readFully
的便捷方法,我认为你会发现它非常有帮助。
答案 1 :(得分:0)
阅读HTTP协议。寻找长度信息。
答案 2 :(得分:0)
对于可能遇到同样问题的任何人,我也忘了在请求本身中添加“连接:关闭”行。当我添加它时,超时问题消失了。有了这个和read()/ readFully()函数,我设法解决了这个问题。希望它可以帮助任何人。