我目前正在开发一个Android应用程序,它通过TCP连接到服务器。服务器是用Qt编写的,并在计算机上运行。
在服务器端,我使用QTcpServer和信号QTcpServer::newConnection()来获得与QTcpServer::nextPendingConnection()新连接的QTcpSocket。我实现了一个名为SocketManager的类,它管理这个套接字接收的数据。
在Android端,我使用java套接字连接到服务器。
一切都很好。当Android端与服务器断开连接时,我的SocketManager对象会被很好地通知并破坏自己。但是,当Android设备离线或关机时,我想要正确地管理这种情况。在这种情况下,我没有收到关于Android断开的通知。我连接我的QTcpSocket的这些信号
QAbstractSocket::disconnected(),QAbstractSocket::stateChanged(QAbstractSocket::SocketState)QAbstractSocket::error(QAbstractSocket::SocketError)QObject::destroyed(QObject*),认为QTcpSocket可能在内部被QTcpServer破坏。但是,当Android设备离线或关闭时,不会接收到任何信号。
QTcpSocket何时由QTcpServer发布?只有当插座断线的时候?所以就我而言,它永远不会被摧毁吗?在Android端的所有情况下,我都应该处理断开连接的问题吗?
谢谢大家。
发布于 2011-07-28 10:45:54
TCP不会通知您断开连接,除非远程对等方显式发送断开连接请求(通过使用close()或关机()方法),或者尝试写入断开连接的套接字(在这种情况下,您会得到中断管道信号)。
解决这个问题的经典方法是实现心跳消息系统,在经过一定数量的心跳不活动之后,关闭套接字,得出远程对等端突然死亡或出现网络问题的结论。
https://stackoverflow.com/questions/6857290
复制相似问题