轉自: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信號最多只有兩個。