【发布时间】:2014-12-31 05:24:23
【问题描述】:
我在 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();
没有效果。
【问题讨论】:
-
这可能是当你关闭 wifi 时,Android 实际上正在移除那个网络接口。比较在 Android 设备上关闭 wifi 与拔下它所连接的接入点之间的区别可能会很有趣。
-
我试图拔掉接入点。结果相同。
标签: java android node.js sockets tcpsocket