我有以下代码:
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/