Java 当无法访问DNS时,URLConnection.setConnectTimeout()不起作用
这是我的密码:Java 当无法访问DNS时,URLConnection.setConnectTimeout()不起作用,java,Java,这是我的密码: URL u = new URL("http://www.google.com"); URLConnection conn = u.openConnection(); conn.setConnectTimeout(3000); conn.connect(); 我的网络连接有时不稳定(我已经连接到无线路由器,但实际上我的路由器没有互联网接入)。当这种情况发生时,此代码将单独阻塞一段时间,并最终抛出UnknownHostExceptio
URL u = new URL("http://www.google.com");
URLConnection conn = u.openConnection();
conn.setConnectTimeout(3000);
conn.connect();
我的网络连接有时不稳定(我已经连接到无线路由器,但实际上我的路由器没有互联网接入)。当这种情况发生时,此代码将单独阻塞一段时间,并最终抛出UnknownHostException
。为什么setConnectTimeout(3000)
在这种情况下不起作用?如何解决这个问题?
谢谢
------------更新---------------
我猜
conn.connect()
将首先查询DNS,但此操作没有时间限制。我尝试了Socket
类,但问题仍然存在setTimeout()
似乎不适用于DNS查询。此方法的某些非标准实现可能会忽略指定的超时。
看到这个我找到了一个可以解决这个问题的帖子。使用另一个线程查询DNS以模拟超时:
@fge
u.openConnection()
在调用conn.connect()
之前不会建立到服务器的连接此答案可能有效,但我尚未测试它。似乎建议您可以在每个域的基础上设置DNS超时:我注意到了这一点。但是我使用的是Oracle的HotSpot JVM,它看起来不像是一个非标准的实现。您可以尝试将ConnectTimeout设置为1,它有时抛出SocketTimeoutException,有时抛出UnknownHostException。这意味着超时工作。