我有以下代码:
socket.connect(new InetSocketAddress(serverHost, serverPort), CONNECT_TIMEOUT);
问题是当无法访问DNS时,InetSocketAddress需要45秒才能超时并返回异常(“主机无法访问...”)。
我需要整个命令(因此创建了InetSocketAddress并提前连接到超时。我没有找到一种方法使new InetSocketAddress(serverHost, serverPort)
超时更早。
有可能吗?
PS 我在Android上,但问题在其他平台上是一样的
答案 0 :(得分:1)
没有简单的方法。您需要运行此代码
socket.connect(new InetSocketAddress(serverHost, serverPort), CONNECT_TIMEOUT);
在一个单独的线程(i / o线程)中,并从UI主线程与它进行通信。一旦超过你的时间限制 - 发送一个终止信号并立即进入UI线程,不要等到它终止。根据状态,i / o线程会立即死亡或最终死亡。