我有以下代码:

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

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

是否可以?

聚苯乙烯
我在 Android 上,但问题在其他平台上是一样的

最佳答案

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

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

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

关于java - InetSocketAddress 超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15415211/

10-11 10:55