gpt4 book ai didi

android - QTcpSocket 的生命周期

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:21 25 4
gpt4 key购买 nike

我目前正在开发一个通过 TCP 连接到服务器的 Android 应用程序。服务器是用 Qt 编写的,在计算机上运行。

在服务器端,我使用 QTcpServer 和信号 QTcpServer::newConnection() 来获取新连接的 QTcpSocket QTcpServer::nextPendingConnection()。我实现了一个名为 SocketManager 的类,它管理此套接字接收的数据。

在Android端,我使用java Socket连接到服务器。

一切都很好。当 Android 端与服务器断开连接时,我的 SocketManager 对象会收到通知并自行销毁。但我想妥善处理 Android 设备离线或关闭等情况。在这种情况下,我不会收到 Android 断开连接的通知。我连接了我的 QTcpSocket 的这些信号:

  • QAbstractSocket::disconnected(),
  • QAbstractSocket::stateChanged(QAbstractSocket::SocketState)
  • QAbstractSocket::error(QAbstractSocket::SocketError)
  • QObject::destroyed(QObject*),认为可能QTcpSocket在内部被QTcpServer销毁了。

但安卓设备掉线或关机时收不到信号。

QTcpServer 何时释放 QTcpSocket?仅当套接字明确断开连接时?那么就我而言,它永远不会被销毁吗?我应该在 Android 端管理所有情况下的断开连接吗?

谢谢大家

最佳答案

TCP 不会通知您断开连接,除非远程对等方显式发送断开连接请求(通过使用close()shutdown() 方法) 或者您尝试写入断开连接的套接字(在这种情况下您会收到一个破损的管道信号)

解决此问题的经典方法是实现心跳消息系统,在一定数量的心跳不活动后,您关闭套接字,断定远程对等点突然死亡或存在网络问题。

关于android - QTcpSocket 的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6857290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com