2

我有一个程序,它使用 UDP(数据大小 150 字节)将数据从一台电脑发送到另一台电脑。该程序是用 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

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

4

1 回答 1

3

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

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

在真实的网络连接中,UDP 数据包会默默丢失。

并且痛苦地......也许;)

于 2011-11-23T14:12:11.243 回答