Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android在TCP套接字连接失败期间长时间运行一段时间_Android_Sockets_Networking_Tcp_Network Programming - Fatal编程技术网

Android在TCP套接字连接失败期间长时间运行一段时间

Android在TCP套接字连接失败期间长时间运行一段时间,android,sockets,networking,tcp,network-programming,Android,Sockets,Networking,Tcp,Network Programming,我正在编写一个使用TCP套接字连接的客户机-服务器应用程序。在我的android项目中,服务创建了一个线程来监听TCP套接字 一切似乎都很好。但是我有一个问题。。我的网络服务在后台运行良好;但是过了一段时间(10-15分钟…),当我再次尝试打开我的应用程序(主活动)时,我无法从套接字连接获得响应。它结冰了还是什么的??我无法从套接字发送或获取TCP消息。。这是什么原因呢?我正在使用我的手机,通过3G连接 (此外,emulator中运行的应用程序没有出现这种问题;我假设它的连接是稳定的,持续时间很

我正在编写一个使用TCP套接字连接的客户机-服务器应用程序。在我的android项目中,服务创建了一个线程来监听TCP套接字

一切似乎都很好。但是我有一个问题。。我的网络服务在后台运行良好;但是过了一段时间(10-15分钟…),当我再次尝试打开我的应用程序(主活动)时,我无法从套接字连接获得响应。它结冰了还是什么的??我无法从套接字发送或获取TCP消息。。这是什么原因呢?我正在使用我的手机,通过3G连接

(此外,emulator中运行的应用程序没有出现这种问题;我假设它的连接是稳定的,持续时间很长)


谢谢您的回答。

当我在我的应用程序中遇到类似的情况时,通常是因为手机的电源优化(无法忽略)。如果插座闲置时间过长,它将自动关闭,需要重新打开。

由于电源优化,或者连接(GPRS/HSDPA/Wifi)发生变化,您的连接很可能会中断

为了维护连接,您的后台服务需要使用PowerManager类声明唤醒锁。这样可以防止设备进入省电模式,从而断开插座的连接。但请注意,这会显著降低设备的电池寿命

此外,您还需要处理断开连接的连接更改。Android会发送一条名为Android.net.conn.CONNECTIVITY\u CHANGE的广播消息,通知连接的变化


根据您的使用情况,我会在设备处于睡眠模式时进行轮询,并且仅在设备处于活动使用状态时建立连接,或者仅使用C2DM推送通知。您是否不时发送数据?比如实现心跳协议?如果您没有,您应该…或者可能与套接字读/写超时有关

Hmm,谢谢您的回答。每3分钟发送一次Keep-alive数据包还是我的解决方案?你觉得呢?我想你可以结合唤醒锁来实现,但你可能仍然会每3分钟重新连接一次。你能更具体地说明你在哪里需要这个吗?聊天、推送通知?是,可以是聊天通知。。但重要的一点是,当我重新打开我的应用程序时,不会提供连接的建立。不知怎的失去了联系。我必须强制停止我的应用程序。这是一个问题。嗯,我不经常发送任何数据,我应该每3分钟发送一次保持活动状态的数据包吗?定义“无法从套接字连接获取响应”。你是说读书的时候吗?并定义“它冻结或什么的”。到底发生了什么?没有什么?例外?没有例外。。我通过发送保持活动状态的数据包解决了这个问题。。