我在 Android 上有 tcp 套接字客户端。我还在nodejs上有tcp套接字服务器,它每2秒向连接的客户端发送测试消息。当我启动应用程序时,它会从服务器接收测试消息。但是当我关闭 wi-fi 连接时,我的客户端套接字将关闭并抛出 SocketException (etimedout),并且如果我打开 wi-fi 我无法接收服务器消息。但是服务器消息已经在服务器中排队并等待发送到客户端。
据我所知,如果tcp客户端失去连接,它应该尝试修复连接并接收服务器消息。但就我而言,客户端无法接收消息,因为套接字已关闭。
在我的电脑上使用Windows和Linux套接字客户端,我正在做同样的事情,但是当我关闭Wi-Fi时,客户端套接字未关闭,当我打开Wi-Fi时,我收到了消息,该消息已发送,当 Wi-Fi 禁用时。
问题:为什么在android中,socket立即关闭?我可以设置套接字客户端关闭的任意超时吗?
我尝试过:
setKeepAlive(true); setSoTimeout(10000);
尝试使用SocketFactory.getDefault().createSocket();
没有效果。
最佳答案
But when I switch off wi-fi connection, my client socket closes and throws SocketException
您的套接字未关闭。 WiFi 关闭时套接字输入流出现问题。它返回-1,但套接字处于 Activity 状态。
关于java - Android tcp套接字设置etimedout值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26733148/