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)
看看它是否有助于你的情况。