Qt杂记——TCP

复制代码
    if(m_tcpSocket!=nullptr)
    {
        m_tcpSocket->flush();
        m_tcpSocket->abort();
        m_tcpSocket->deleteLater();
        m_tcpSocket = nullptr;
    }

(1)m_tcpSocket->flush()

调用m_tcpSocket->flush()函数可以强制将发送缓冲区中的数据立即发送出去,而不需要等待操作系统自动发送。这在某些特定的场景下是很有用的,比如需要及时将数据发送给对方,或者需要确保数据在某个时间点之前被发送出去。

需要注意的是,flush()函数只是将数据从发送缓冲区发送出去,并不保证对方已经接收到数据。如果需要确保数据已经被对方接收,可以使用其他机制,比如等待对方发送确认消息。

(2)m_tcpSocket->abort();

该函数是在Qt框架中的QTcpSocket类中定义的,用于处理TCP连接。调用abort()函数后,QTcpSocket对象会进入一个无连接状态,并且可以重新使用或销毁。

需要注意的是,调用abort()函数后,可能会触发QAbstractSocket::error()信号,以便通知应用程序连接已经中止。

(3)m_tcpSocket->deleteLater();

m_tcpSocket->deleteLater()是一个Qt框架中的函数,用于在稍后的时间点删除一个QObject对象。在这种情况下,m_tcpSocket是一个QTcpSocket对象,调用deleteLater()函数将会在事件循环中删除该对象。

(4)

复制代码
Tool_TCP::~Tool_TCP()
{
    if(m_tcpSocket!=nullptr)
    {
        m_tcpSocket->flush();
        m_tcpSocket->abort();
        m_tcpSocket->deleteLater();
        m_tcpSocket = nullptr;
    }
}

这段代码是一个析构函数的实现,用于释放Tool_TCP类的对象时执行的操作。在析构函数中,首先判断m_tcpSocket是否为空指针,如果不为空,则执行以下操作:

  1. 调用flush()函数,将缓冲区中的数据写入到套接字中。
  2. 调用abort()函数,中止当前的网络连接。
  3. 调用deleteLater()函数,将m_tcpSocket对象标记为待删除,并在事件循环中删除该对象。
  4. 将m_tcpSocket指针设置为nullptr,以避免悬空指针的问题。

这段代码的作用是在释放Tool_TCP对象时,确保网络连接被正确关闭,并释放相关资源。

相关推荐
luoyayun36122 分钟前
Qt/QML音视频文件原始十六进制查看器
qt·音视频·十六进制查看
feifeigo12325 分钟前
matlab电力系统重构实现
开发语言·matlab·重构
小c君tt29 分钟前
QT笔记记录
开发语言·笔记·qt
布朗克16833 分钟前
Go 入门到精通-08-复合类型之数组与切片
开发语言·后端·golang·数组与切片
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第151题】【06_Spring篇】第11题:说一下 Spring Bean 的生命周期?
java·开发语言·后端·spring·面试
广州浮点FLOATLIC1 小时前
Creo 许可证利用率怎么优化:制造企业该先看共享规则,还是先看模块占用结构
java·开发语言
wuyk5551 小时前
21. 嵌入式面试避坑指南:sizeof 是关键字,不是函数!
c语言·开发语言·stm32·单片机·嵌入式硬件
2601_962440841 小时前
计算机毕业设计之jsp教室管理系统
java·开发语言·笔记·分布式·算法·课程设计·推荐算法
澈2074 小时前
QT入门第十一天:数据库编程(上)SQLite入门与增删改查 | 零基础学QT
数据库·qt·sqlite
M158227690556 小时前
协议互通利器|SG-TCP-COE-210 Modbus TCP 转 CANOpen 网关,低成本打通以太网与运动总线
服务器·网络·tcp/ip