Java HTTP GET响应等待超时

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";

我应该开发一个程序来读取具有指定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”行。一段时间后,超时发生,代码继续。我尝试连接到的服务器未执行“连接:关闭”。如何检测文件的结尾?

阅读HTTP协议。查找长度信息。

其他答案已被删除,因此我将发布一个。您使用的IO方法读取信息行,其中一行定义为以换行符结尾的一组字符。但不能保证您的TCP数据包以换行符结尾,所以您需要使用更不可知的IO读取来处理它们


看看DataInputStream,它有一个方便的方法,名为“readFully”,我想你会发现它非常有用。

很抱歉回答得太晚了


对于可能遇到相同问题的任何人,我也忘记在请求本身添加“Connection:close”行。当我添加它时,超时问题消失了。通过这个和read()/readFully()函数,我成功地解决了这个问题。希望对任何人都有帮助。

这是家庭作业吗?为什么会禁止您使用Java SDK中包含的HTTP库?是的,这是一个家庭作业。虽然,就我所见,HTTP库在从流读取时的工作方式基本相同。由于无法检测到文件的结尾,问题将出现。谢谢,我将尝试解析头并使用BufferedReader.read()而不是readLine()。哇,我不知道readFully(),这正是我要找的。非常感谢:D