2011-01-11 40 views

回答

7

一般來說,操作系統只爲第一個問題提供簡單的API--因爲Qt是一個可移植的API,所以最好只依靠它來傳輸到操作系統的緩衝區。如果您需要實際的收據確認,最好由遠程應用程序發送它 - 畢竟,數據可以被遠程確認,但永遠不會讀取遠程的操作系統讀取緩衝區。

如果您需要避免讓遠程端永遠阻塞您,您應該等待QIODevice::bytesWritten信號並返回到事件循環以完成其他工作,或者只需設置適當的超時時間。一般來說,遠程端可能會在某種程度上阻止你 - 也就是說,它可以拒絕確認,填充本地操作系統緩衝區,此時寫入操作不會使其從Qt到OS;無論waitForBytesWritten()處於什麼級別,它總是可以被阻止。

因此,bytesWrittenwaitForBytesWritten()只能用於節流的數據源 - 也就是說,如果你要進入傳遞1G數據的插座上的緊密循環一次全部,你可能最終緩衝它在這個過程中,內存不足。通過用bytesWritten信號觸發額外的讀/寫操作,可以避免此問題。

+0

我不需要確認收到。我真正想要的是避免客戶端可以通過等待發送ACK來延遲應用程序的情況。 – 2011-01-11 05:50:05