在我的Java客户端应用程序中,我使用HttpsURLConnection连接到我的服务器。这一切都很好,除非在某些时刻它根本不会超时。我这样设置了连接的超时参数(到5000毫秒):
unique_lock
我捕获所有异常,但没有注册,所以问题不能成为未捕获的异常。连接根本不会超时。我等了3分钟,没有回应。在执行请求期间,我可以在切换网络时重现该错误几次。
此外,有时大约一分钟后会有回应。这比超时时间长。
我已经尝试在超时后中断发出请求的线程,断开HttpsURLConnection。但必须有一个更简洁的解决方案。我想知道这个无限期超时的来源。
有什么想法吗?
非常感谢!
答案 0 :(得分:1)
来自我的评论
超时时抛出的异常应该是java.net.SocketTimeoutException
,您应该已经抓住它,因为它不是运行时异常(无法在代码中看到您是如何做到这一点的)虽然)。
另请注意,来自API:
这种方法的一些非标准实施可能会忽略 指定超时。要查看连接超时设置,请致电 getConnectTimeout()
来自您的评论
的确,当我打印
getConnectTimeout()
结果时,我总是得到0 (无限的),无论我分配给它的是哪个值。所以,我们现在知道了HttpsURLConnection
有一个"非标准实施"的setConnectTimeout()
方法。但是我怎样才能限制无限 但是超时?
快速而丑陋的解决方案
call
覆盖Callable<String>
(其参数化类型是我认为是result
变量的类型)。Executor
提交新的Callable<String>
。 Future<String>
上的get,并相应地处理TimeoutException。 A(可能)更好,更长期的解决方案
abstract class HttpsURLConnection
的实施情况,看看是否存在错误/与实施它的人进行通信。