我有一个程序,使用UDP(数据大小为150字节)将数据从一台PC发送到另一台PC。那 程序在delphi 7中编写(TldUDPClient和TldUDPServer组件使用 发送和接收数据)。我需要在30%的数据包丢失时测试这个程序。
我使用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 :(得分:3)
听起来更像是丢包仿真问题。 ipfw
工具似乎会中断连接 - 来自this site - 这是你的版本吗? - 源代码没有实现这个选项 - 但它已经有4年了。使用ping命令,您只知道在预期时间内没有收到任何答案 - ARP协议AFAIR中没有“连接”。
从UDP标准来看,数据包丢失是无痛的:没有向套接字层检索到确认或错误消息。
在真实的网络连接上,UDP数据包会以静默方式丢失。