Android tcp套接字设置etimedout值

时间:2014-11-04 10:44:44

标签: java android node.js sockets tcpsocket

我在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();

没效果。

2 个答案:

答案 0 :(得分:0)

你的SoLinger是什么?

尝试使用

setSoLinger(boolean on, int timeout)

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

答案 1 :(得分:0)

  

但是当我关闭Wi-Fi连接时,我的客户端套接字关闭了   抛出SocketException

您的套接字未关闭。当WiFi关闭时,套接字输入流存在问题。它返回-1,但socket仍处于活动状态。