2011-11-23 238 views
2

我有一個程序,使用UDP(數據大小爲150字節)從一臺PC發送數據到另一臺。那 程序寫在德爾福7(TldUDPClient和TldUDPServer組件使用 發送和recive數據)。我需要在30%的數據包丟失情況下測試此程序。udp數據包丟失

我用ipfw的Windows(從SourceForge下載):

ipfw -f flush 
ipfw add pipe 1 ip from any to any out 
ipfw pipe 1 config plr 0.3 

當我用ping我看到的數據丟失的30%。

當我啓動我的delphi程序,經過一段時間的工作,它返回一個 錯誤:socket error 10004。錯誤的描述是:中斷函數調用。 阻止操作被WSACancelBlockingCall的調用中斷。

這是我的網絡組件和丟包仿真之間的能力問題嗎?或者,在真實情況下,我是否也會在丟包的情況下看到?哪個另一個防火牆或其他軟件可用於模擬丟包?

+0

多少數據你發送一個UDP數據包使用UDP?如果它低於底層網絡的數據包大小(UDP數據包保證完全到達或根本沒有,但底層可能有多個網絡數據包(不知道官方名稱)),我可以認爲這可能發生在現實生活中也。 –

回答

3

聽起來更像是一個丟包仿真問題。 ipfw工具似乎中斷連接 - 從this site - 它是你的版本? - 源代碼沒有實現這個選項 - 但它已經有4年了。使用ping命令,您只知道在預期的時間內沒有收到任何答覆 - ARP協議AFAIR中沒有「連接」。

根據UDP標準,數據包丟失是無痛的:沒有確認或錯誤消息檢索到套接字層。

在真實的網絡連接上,UDP數據包無聲無息地丟失。

而且painfully... perhaps;)