转自:https://blog.csdn.net/dengdew/article/details/79065608
本篇文章是我看了其他博主对QTcpSocket中的readyRead信号机制的解读,感觉对自己理解这一块很有帮助,故将摘要内容写在下面,供自己学习和大家查阅。如有侵权,请联系我删除。
1、readyRead信号触发是在QTcpSocket缓存接收到新的数据时,并不等同于发送端write函数调用一次。实际情况是发送端write的数据先到接收端系统的Tcp/ip协议栈中(也就是系统的IO缓冲区),然后再从此缓冲区到QTcpSocket程序的缓存中。readyRead信号触发需要数据传到QTcpSocket缓存中。
2、当数据从系统缓冲区到QTcpSocket缓存时,readyRead信号触发一次。如果此时readyRead槽函数还没有及时执行,又有新的数据到来了,而且来了很多次(QTcpSocket缓存还没满的情况,满的情况下系统不再发数据给应用),那么这些所有的都将会只触发一次readyRead信号。
3、当数据从系统缓冲区到QTcpSocket缓存时,readyRead信号触发一次。如果此时readyRead槽函数执行了,后续再来的新数据,将会触发新的readyRead信号。但这个QTcpSocket连接中,还没有响应的readyRead信号最多只有两个。