我在android上有tcp套接字客户端。另外我在nodejs上有tcp套接字服务器,它每2秒发送一次连接的客户端测试消息。当我启动应用程序时,它会从服务器接收测试消息。但是当我关闭wi-fi连接时,我的客户端套接字关闭并抛出SocketException(etimedout),如果我打开wi-fi,我就无法接收服务器消息。但服务器消息已在服务器中排队,并等待发送到客户端。
据我所知,如果tcp客户端丢失了连接,它应该尝试修复连接并接收服务器消息。但就我而言,客户端无法接收消息,因为socket已关闭。
在我的电脑上使用Windows和Linux套接字客户端,我正在做同样的事情,但是当我关闭wi-fi,客户端套接字没有关闭,当我打开wi-fi时,我收到了消息,已发送,当wi-fi禁用时。
问题:为什么在android中,socket立即关闭?我可以设置套接字客户端关闭的任何超时吗?
我试过了:
setKeepAlive(true); setSoTimeout(10000);
尝试使用SocketFactory.getDefault().createSocket();
没效果。
答案 0 :(得分:0)
你的SoLinger是什么?
尝试使用
setSoLinger(boolean on, int timeout)
看看它是否有助于你的情况。
答案 1 :(得分:0)
但是当我关闭Wi-Fi连接时,我的客户端套接字关闭了 抛出SocketException
您的套接字未关闭。当WiFi关闭时,套接字输入流存在问题。它返回-1,但socket仍处于活动状态。