我应该开发一个程序来读取具有指定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/

10-12 23:22