当DNS无法访问时,URLConnection.setConnectTimeout()不起作用

时间:2015-01-28 09:05:28

标签: java

这是我的代码:

URL u = new URL("http://www.google.com");
        URLConnection conn = u.openConnection();
        conn.setConnectTimeout(3000);
        conn.connect();

我的网络连接有时不稳定(我已连接到无线路由器但实际上我的路由器无法访问Internet)。当发生这种情况时,此代码将单独阻止并最终抛出UnknownHostException。为什么setConnectTimeout(3000)在这种情况下不起作用?如何解决这个问题? 谢谢!

------------ ---------------更新

我的猜测是conn.connect()将首先查询DNS,但此操作没有时间限制。我已经尝试了Socket课,问题仍然存在。 setTimeout()似乎不适用于DNS查询。

2 个答案:

答案 0 :(得分:1)

我发现了一个可以解决它的帖子。使用另一个线程来查询DNS以模拟超时: http://thushw.blogspot.sg/2009/11/resolving-domain-names-quickly-with.html

答案 1 :(得分:0)

此方法的某些非标准实现可能会忽略指定的超时。 见setConnectTimeout