Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当无法访问DNS时,URLConnection.setConnectTimeout()不起作用_Java - Fatal编程技术网

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。这意味着超时工作。