udp丢包

时间:2011-11-23 10:47:03

标签: windows delphi delphi-7 winsock ipfw

我有一个程序,使用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来中断阻止操作。

我的网络组件和数据包丢失仿真之间的容量问题是什么?或者,在遭遇数据包丢失时,我是否会在实际情况中看到这一点?我可以使用哪个其他防火墙或其他软件来模拟丢包?

1 个答案:

答案 0 :(得分:3)

听起来更像是丢包仿真问题。 ipfw工具似乎会中断连接 - 来自this site - 这是你的版本吗? - 源代码没有实现这个选项 - 但它已经有4年了。使用ping命令,您只知道在预期时间内没有收到任何答案 - ARP协议AFAIR中没有“连接”。

从UDP标准来看,数据包丢失是无痛的:没有向套接字层检索到确认或错误消息。

在真实的网络连接上,UDP数据包会以静默方式丢失。

painfully... perhaps;)