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