Java HTTP GET响应等待超时
我应该开发一个程序来读取具有指定URL的网页,但问题是我不允许使用任何HTTP库,我只允许使用TCP 下面是读取响应消息的代码:Java HTTP GET响应等待超时,java,http,tcp,timeout,Java,Http,Tcp,Timeout,我应该开发一个程序来读取具有指定URL的网页,但问题是我不允许使用任何HTTP库,我只允许使用TCP 下面是读取响应消息的代码: private static String readMultiline (BufferedReader inStr) { String message=""; String line=readLine(inStr); while (line != null) { message += line + "\r\n";
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”行。一段时间后,超时发生,代码继续。我尝试连接到的服务器未执行“连接:关闭”。如何检测文件的结尾?阅读HTTP协议。查找长度信息。其他答案已被删除,因此我将发布一个。您使用的IO方法读取信息行,其中一行定义为以换行符结尾的一组字符。但不能保证您的TCP数据包以换行符结尾,所以您需要使用更不可知的IO读取来处理它们
看看DataInputStream,它有一个方便的方法,名为“readFully”,我想你会发现它非常有用。很抱歉回答得太晚了
对于可能遇到相同问题的任何人,我也忘记在请求本身添加“Connection:close”行。当我添加它时,超时问题消失了。通过这个和read()/readFully()函数,我成功地解决了这个问题。希望对任何人都有帮助。这是家庭作业吗?为什么会禁止您使用Java SDK中包含的HTTP库?是的,这是一个家庭作业。虽然,就我所见,HTTP库在从流读取时的工作方式基本相同。由于无法检测到文件的结尾,问题将出现。谢谢,我将尝试解析头并使用BufferedReader.read()而不是readLine()。哇,我不知道readFully(),这正是我要找的。非常感谢:D