超时InetSocketAddress

时间:2013-03-14 16:43:11

标签: java

我有以下代码:

socket.connect(new InetSocketAddress(serverHost, serverPort), CONNECT_TIMEOUT);

问题是当无法访问DNS时,InetSocketAddress需要45秒才能超时并返回异常(“主机无法访问...”)。 我需要整个命令(因此创建了InetSocketAddress并提前连接到超时。我没有找到一种方法使new InetSocketAddress(serverHost, serverPort)超时更早。

有可能吗?

PS 我在Android上,但问题在其他平台上是一样的

1 个答案:

答案 0 :(得分:1)

没有简单的方法。您需要运行此代码

socket.connect(new InetSocketAddress(serverHost, serverPort), CONNECT_TIMEOUT);

在一个单独的线程(i / o线程)中,并从UI主线程与它进行通信。一旦超过你的时间限制 - 发送一个终止信号并立即进入UI线程,不要等到它终止。根据状态,i / o线程会立即死亡或最终死亡。