java - Android tcp套接字设置etimedout值

标签 java android node.js sockets tcpsocket

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

没有效果。

最佳答案

But when I switch off wi-fi connection, my client socket closes and throws SocketException

您的套接字未关闭。 WiFi 关闭时套接字输入流出现问题。它返回-1,但套接字处于 Activity 状态。

关于java - Android tcp套接字设置etimedout值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26733148/

相关文章:

java - FirebaseInstanceId 不再存在

javascript - 安全地处理 Node 中的错误 JSON.parse()

java - 我是否需要编写一个自定义 HttpMessageConverter 来将 List<Long> 作为参数与 RestTemplate 一起传递

java - Spring引导,XML在POM.xml上有 "Unknown"错误

apache - 使用 Java 监控 Apache Web 服务器

node.js - Sequelize 抛出弃用警告

javascript - ES6 解构的 promise ?

java - While 循环不会重新运行程序,仅询问是否要再次循环

java - Android Studio DatePicker 在微调模式下显示年份部分

Android:删除整个数据库