2

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

据我所知,如果 tcp 客户端失去连接,它应该尝试修复连接并接收服务器消息。但就我而言,客户端无法接收消息,因为套接字已关闭。

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

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

我试过了 :

 setKeepAlive(true); setSoTimeout(10000);

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

没有效果。

4

2 回答 2

0

但是当我关闭 wi-fi 连接时,我的客户端套接字关闭并抛出 SocketException

你的套接字没有关闭。WiFi 关闭时,套接字输入流存在问题。它返回 -1,但套接字是活动的。

于 2014-11-04T15:37:50.120 回答
0

您的 SoLinger 设置为什么?

尝试使用

setSoLinger(boolean on, int timeout)

看看它是否对你的情况有帮助。

于 2014-11-04T11:12:00.583 回答