InetSocketAddress的超时时间

4

我有以下代码:

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

问题在于当DNS不可访问时,InetSocketAddress需要45秒超时并返回异常("主机不可访问...")。 我需要整个命令(因此创建InetSocketAddress和连接需要更早超时)。我没有找到一种方法可以使new InetSocketAddress(serverHost, serverPort)更早超时。 这可能吗? PS 我在Android上,但其他平台的问题是相同的。

启动看门狗线程并在所需时间后进行“中断”? - Boris the Spider
这是唯一的解决方案吗? - user1175790
或者我猜可以使用IP地址。 - Boris the Spider
就是我不明白为什么超时时间不能配置,因为它已经存在了。但也许那不是真正的超时。该操作需要一段时间才能意识到 DNS 不可访问。 - user1175790
我不能使用IP地址。用户需要能够定义地址。 - user1175790
1个回答

1

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

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

在一个单独的线程(即I/O线程)中运行,并从UI主线程与其通信。一旦超出时间限制,发送终止信号并立即在UI线程中进行处理,不要等待其终止。根据状态,I/O线程可能会立即死亡,也可能最终死亡。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接