我应该开发一个程序来读取具有指定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循环仍在等待不存在的“next”行。一段时间后,超时发生,代码继续。我尝试连接的服务器不执行“连接:关闭”。如何检测文件结尾?
最佳答案
其他答案已删除,所以我将张贴一个。您正在使用读取信息行的IO方法,其中一行被定义为以换行符结尾的一组字符。但不能保证您的TCP数据包以换行结尾,所以您需要使用更不可知的IO读取来处理它们。
看看datainputstream,它有一个叫做readFully
的方便方法,我认为您会发现它非常有用。
关于java - Java HTTP GET响应一直等到超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8527291/