Android tcp套接字设置etimedout值



我在android上有tcp套接字客户端。另外,我在nodejs上有一个tcp套接字服务器,它每2秒向连接的客户端发送一次测试消息。当我启动应用程序时,它会从服务器接收测试消息。但当我关闭wi-fi连接时,我的客户端套接字会关闭并抛出SocketException(etimedout),如果我打开wi-fi,我将无法接收服务器消息。但服务器消息已经在服务器中排队,等待发送到客户端。

正如我所知,如果tcp客户端失去连接,它应该尝试修复连接并接收服务器消息。但在我的情况下,客户端无法接收消息,因为套接字已关闭。

在我的电脑上有了windows和linux套接字客户端,我也在做同样的事情,但当我关闭wi-fi时,客户端套接字没有关闭,当我打开wi-fi后,我收到了wi-fi禁用时发送的消息。

问题:为什么在android中,套接字会很快关闭?我可以为套接字客户端关闭设置任何超时吗

我试过了:

 setKeepAlive(true); setSoTimeout(10000);

尝试使用SocketFactory.getDefault().createSocket();

没有效果。

但当我关闭wi-fi连接时,我的客户端插座关闭throws SocketException

你的插座关不上。当WiFi关闭时,套接字输入流出现问题。它返回-1,但套接字是活动的。

您的SoLinger设置为什么?

尝试使用

setSoLinger(boolean on, int timeout)

看看它是否有助于你的处境。

最新更新