Qt Socket 通讯 readyRead 信号触发

本文详细阐述了QTcpSocket中数据接收过程:readyRead信号并非write调用同步,而是系统缓冲区满后触发。当数据分批到达时,可能只触发一次readyRead,且最多两次响应。理解这些有助于优化网络通信处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在 QTcpSocket 缓存接收到新的数据时 readyRead 信号被触发,并不等同于发送端 write 函数调用一次。实际情况是发送端 write 的数据先到接收端系统的 Tcp/ip 协议栈中(也就是系统的IO缓冲区),然后再从此缓冲区到 QTcpSocket 程序的缓存中。readyRead 信号触发需要数据传到 QTcpSocket 缓存中。

2、当数据从系统缓冲区到 QTcpSocket 缓存时,readyRead 信号触发一次。如果此时 readyRead 槽函数还没及时执行,又有新的数据到来了,而且来了很多次(QTcpSocket缓存还没满的情况,满的情况下系统不再发数据给应用),那么这些所有的都将会只触发一次 readyRead 信号。

3、当数据从系统缓冲区到 QTcpSocket 缓存时,readyRead 信号触发一次。如果此时 readyRead 槽函数执行了,后续再来的新数据,将会触发新的 readyRead 信号。但这个 QTcpSocket 连接中,还没有响应的 readyRead 信号最多只有两个。

参考:

https://blog.youkuaiyun.com/dengdew/article/details/79065608

https://www.cnblogs.com/xukai6/p/9668674.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值