我有一个程序可以使用UDP(数据大小150字节)将数据从一台PC发送到另一台PC。那
程序在delphi 7中编写(TldUDPClient和TldUDPServer组件使用
发送和接收数据)。我需要对30%的数据包丢失进行测试。

我为Windows使用ipfw(从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中断了阻止操作。

网络组件和丢包仿真之间是否存在功能问题?或者在丢包的情况下,我也会在实际情况中看到吗?我可以使用哪个其他防火墙或其他软件来模拟丢包?

最佳答案

听起来更像是丢包模拟问题。 ipfw工具似乎从this site中断了连接-它是您的版本吗? -源代码未实现此选项-已有4年的历史了。使用ping命令,您只知道您在预期时间内没有收到任何答复-ARP协议(protocol)AFAIR中没有“连接”。

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

在实际的网络连接上,UDP数据包会静默丢失。

painfully... perhaps;)

09-20 14:58