我使用QTCPSocket
連接到TCP服務器(它運行在Ubuntu上)。服務器至少每40ms發送一個1字節的數據包。我的應用程序是實時的,所以重要的是我儘可能快地接收數據,但需要額外的網絡通信量。Windows套接字TCP客戶端每200毫秒接收一次數據(QTCPSocket)
從Windows連接TCP客戶端後,我開始接收數據包。但是,QTCPSocket
的readyRead()
信號只能每200毫秒發送一次(包中有5個字節)。我看過Wireshark中的數據包,它們實際上是5字節的數據包。
但是,在Mac上使用QTCPSocket
(實際上是完全相同的代碼),我每次都得到單獨的數據包,所有發送的1字節數據包都以單字節數據包的形式發送,這非常棒。
我試着創建一個原始的Windows套接字(不使用QTCPSocket
),並在Windows上獲得與QTCPSocket
相同的行爲。
導致Mac套接字以更高時間分辨率接收數據包的區別是什麼?有什麼我可以在setsockopt()
設置,這將防止200毫秒的緩衝發生?
我知道在服務器端設置TCP_NODELAY
可能會解決我的問題,但看到Mac TCP Client按預期工作時,必須有一種方法可以在Windows上獲得相同的行爲。
設置'mySocket-> setSocketOption(QAbstractSocket :: LowDelayOption,1);'在服務器端是我發現的唯一方法來解決這個問題 – oggmonster 2013-02-15 15:48:23
您嘗試先修復協議?因爲這對我來說一直都很有用。 – 2013-02-15 16:53:21
TCP是一個流媒體協議。對於這種用法,UDP可能會更好。 – 2013-02-15 20:17:06