这是我的代码:
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查询。
答案 0 :(得分:1)
我发现了一个可以解决它的帖子。使用另一个线程来查询DNS以模拟超时: http://thushw.blogspot.sg/2009/11/resolving-domain-names-quickly-with.html
答案 1 :(得分:0)
此方法的某些非标准实现可能会忽略指定的超时。 见setConnectTimeout