4

我有以下代码:

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

问题是当 DNS 不可访问时,InetSocketAddress 需要 45 秒超时并返回异常(“主机不可访问...”)。我需要整个命令(所以更早地创建 InetSocketAddress 和连接超时。我没有找到让超时时间更早的方法new InetSocketAddress(serverHost, serverPort)

可能吗?

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

4

1 回答 1

1

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

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

在一个单独的线程(i/o 线程)中并从 UI 主线程与其通信。一旦超过时间限制 - 向它发送终止信号并立即在 UI 线程中继续,不要等到它终止。根据状态,i/o 线程要么立即终止,要么最终终止。

于 2014-02-10T05:26:50.897 回答