在局域网外测试UDP代码的问题?

时间:2009-04-28 21:20:45

标签: udp

我在接下来的几天里学习udp。这个周末我将参加72小时的比赛之一,我希望我的UDP代码能够在线完成。在比赛期间,我不会有任何互联网(因此没有呼叫某人并让他们测试)。

我知道有关UDP的一些问题,比如两次进入的数据包,没有进入几个帧(但我不知道我应该期待多长时间),建议的字节大小(576)等{ {3}}

但是从LAN迁移到互联网后会发生什么事情?

注意:我将尽快运行一些代码并在线测试。希望我的最终代码看起来像什么,但我也可能会遗漏一些事情。

4 个答案:

答案 0 :(得分:0)

您的延迟可能会增加,您可能会丢失更多的数据包。这取决于发射器和接收器的位置。如果你在美国并且你正在尝试与澳大利亚的UDP进行通信,那么你将获得相当高的延迟,你将遭受更多的数据包丢失/重新排序的数据包/重复数据,因为有更多的旅行距离和更多的数据包路径被路由。

答案 1 :(得分:0)

如果您使用UDP作为传输协议,则必须在应用程序协议中保护传输。有几种方法可以做到这一点:

  • 数据包序列号
  • 数据包大小
  • 校验

您应该将这些作为应用程序包的标头发送,并在接收端进行检查。

PS:如果你真的依赖于协议各方面的正确数据包顺序和完整性(不仅仅是部分协议),你应该切换到TCP。

答案 2 :(得分:0)

这可能有点极端(!)但如果这很重要,您可以编写一个UDP代理来侦听传入的数据报并将其转发。然后,您可以修改它以提供:

  1. 延迟
  2. 数据包丢弃
  3. 数据包复制
  4. 并指示您的客户端将数据发送到代理,并将代理直接(通过适当的数据包修改)发送到服务器。

    像我说的那样,也许是极端的。 然而,即使存在您的LAN / Internet,您也可以使用它来测试您的应用程序在UDP不友好的环境中的行为。

    编辑:当然有人写过这样的东西?如果没有,我会感觉到一个开源项目......

答案 3 :(得分:0)

简短的回答是:在局域网上,你可能会注意到UDP的权衡(好的和坏的)很少,因为在局域网上很少有东西可以出错。

你可能丢失数据包。局域网拥塞或本地系统限制是最可能的原因。

当您离开LAN并依赖路由器时,将出现大多数UDP问题(碎片,重复数据包,延迟数据包,丢弃超过一定大小的数据包,缺少返回的错误消息)。

换句话说,使UDP复杂化的主要原因是“离开局域网”。