-2

我似乎无法弄清楚为什么我的 httpurlconnection 挂起。

我有以下设置:连接url,检查响应码是否为200,如果1秒没有休眠,调用httpurlconnection.disconnect(),然后重试,如果6秒过去,停止尝试并返回。如果有 200 响应代码,则尝试使用缓冲读取器读取输入流,使用(if String (i =readLine())!=null,将读取超时设置为 8 秒。

所有这些都是使用线程完成的,有时它会挂起,有时它不会,所以我用Callableand测试了它executorservice,所以我可以在它在 30 秒后没有返回输入流后终止。但是,如果timeoutexception执行程序服务中有 a ,用于关闭 a 的 finally 块bufferedreader不会被执行,并且某些东西仍然挂起。没有无限循环,并且代码,考虑到 8 秒的读取超时httpurlconnection和 6 秒的限制来获得 200 响应,不应该超过 14-15 秒,但它经常这样做。

那么在任何情况下,变量设置为httpurlconnection, 都不会通过调用正确终止流disconnect()?此外,javadoc forurlconnectionsetReadTimeout方法指出:“此方法的某些非标准实现会忽略指定的超时。”这是什么意思?

4

2 回答 2

0

我有以下设置:连接url,检查响应码是否为200,如果1秒没有休眠,调用httpurlconnection.disconnect(),然后重试,如果6秒过去,停止尝试并返回。如果有 200 响应代码,则尝试使用缓冲读取器读取输入流,使用 (if String (i =readLine())!=null,将读取超时设置为 8 秒。

扔掉它并使用 URLConnection.setReadTimeout()。这就是它的用途。当您使用 HTTP 时,您将获得“标准实现”,因此您不必担心“忽略”部分。显然你甚至没有尝试过,或者你已经知道了。

于 2012-05-04T06:24:00.627 回答
-1

哎呀,这似乎是一个不必要的复杂解决方案。为什么不使用 apache 的 Java HTTPCLient?http://hc.apache.org/httpcomponents-client-ga/

于 2012-05-02T21:36:46.060 回答