我在接下来的几天里学习udp。这个周末我将参加72小时的比赛之一,我希望我的UDP代码能够在线完成。在比赛期间,我不会有任何互联网(因此没有呼叫某人并让他们测试)。
我知道有关UDP的一些问题,比如两次进入的数据包,没有进入几个帧(但我不知道我应该期待多长时间),建议的字节大小(576)等{ {3}}
但是从LAN迁移到互联网后会发生什么事情?
注意:我将尽快运行一些代码并在线测试。希望我的最终代码看起来像什么,但我也可能会遗漏一些事情。
答案 0 :(得分:0)
您的延迟可能会增加,您可能会丢失更多的数据包。这取决于发射器和接收器的位置。如果你在美国并且你正在尝试与澳大利亚的UDP进行通信,那么你将获得相当高的延迟,你将遭受更多的数据包丢失/重新排序的数据包/重复数据,因为有更多的旅行距离和更多的数据包路径被路由。
答案 1 :(得分:0)
如果您使用UDP作为传输协议,则必须在应用程序协议中保护传输。有几种方法可以做到这一点:
您应该将这些作为应用程序包的标头发送,并在接收端进行检查。
PS:如果你真的依赖于协议各方面的正确数据包顺序和完整性(不仅仅是部分协议),你应该切换到TCP。
答案 2 :(得分:0)
这可能有点极端(!)但如果这很重要,您可以编写一个UDP代理来侦听传入的数据报并将其转发。然后,您可以修改它以提供:
并指示您的客户端将数据发送到代理,并将代理直接(通过适当的数据包修改)发送到服务器。
像我说的那样,也许是极端的。 然而,即使存在您的LAN / Internet,您也可以使用它来测试您的应用程序在UDP不友好的环境中的行为。 编辑:当然有人写过这样的东西?如果没有,我会感觉到一个开源项目......答案 3 :(得分:0)
简短的回答是:在局域网上,你可能会注意到UDP的权衡(好的和坏的)很少,因为在局域网上很少有东西可以出错。
你可能丢失数据包。局域网拥塞或本地系统限制是最可能的原因。
当您离开LAN并依赖路由器时,将出现大多数UDP问题(碎片,重复数据包,延迟数据包,丢弃超过一定大小的数据包,缺少返回的错误消息)。
换句话说,使UDP复杂化的主要原因是“离开局域网”。