2012-02-20 74 views
0

這個問題聽起來像是現有的問題的重複,我讀過關於Leaky bucket算法,和其他一些。如何在使用套接字限制下載速度時丟棄數據包?

假設我的程序是單線程的,數據是這樣的:如果我放棄了一些數據包時計算出的速度超出了門檻,我應該如何來恢復數據包

[ downloaded ] [ current buffer (downloading) ] [ un-downloaded ]

?數據將以這種方式連續。

我該如何丟棄數據包呢?

回答

0

TCP旨在重新發送未確認的數據包。這是協議的一部分,是漏桶算法的基礎。

因爲這個原因,我可以考慮開溝數據包的唯一方法是,如果你使用的函數庫有一個函數,在收到數據包後不發送ACK。如果是這種情況,只需在所有要保留的數據包上發送ACK,然後忽略其他數據包,因爲稍後會再發送該數據包。

話雖如此,大多數庫將不支持此功能,因爲它是非常低的水平,他們在內部處理TCP部分。

如果你讓我們知道了特定的語言(和插座實現)你想速率限制在別人可能知道節流

+0

我使用Qt的網絡模塊,QNetworkRequest連接的更好方法 – daisy 2012-03-06 09:49:18

0

當使用TCP套接字連接時,程序不應該「丟棄數據包」。如果超出下載速度限制,您想要阻止程序讀取更多數據。