Android的tcp套接字设置etimedout值

我有Android上的TCP套接字客户端。 另外,我有tcp套接字服务器nodejs,它发送到连接客户端testing消息每2秒。 当我启动应用程序时,它从服务器接收testing消息。 但是,当我closuresWi-Fi连接,我的客户端套接字closures并抛出SocketException(etimedout),如果我打开Wi-Fi我无法接收服务器消息。 但服务器消息已经在服务器中排队,并等待发送给客户端。

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

在我的电脑上使用Windows和Linux套接字客户端,我正在做同样的事情,但是当我closuresWi-Fi时,客户端套接字没有closures,当我切换Wi-Fi时,我收到消息, -fi禁用。

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

我试过了 :

setKeepAlive(true); setSoTimeout(10000); 

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

没有效果。

但是,当我closuresWi-Fi连接,我的客户端套接字closures并抛出SocketException

你的套接字不closures。 当WiFiclosures时,套接字inputstream存在问题。 它返回-1,但套接字是活着的。

你的SoLinger设置了什么?

尝试使用

 setSoLinger(boolean on, int timeout) 

看看它是否有助于你的情况。