可能存在哪些UDP数据传输错误?

3
我们要开发一个支持互联网多人游戏的游戏。由于这是一个交互式游戏,我知道我必须使用UDP来减少连接延迟,但我想知道在使用UDP连接传递数据时可能出现哪些错误?无论我去哪里找信息,他们都说UDP提供“尽力而为的传输”,但没有人给出完整的解释这是什么意思。阅读了一些文章后,我还有两个问题:
1. 是否可能发送一个数据包并在连接的另一端接收到部分数据? 2. 如果您对第一个问题的回答是肯定的,下一个数据包会发生什么情况?我应该等待其余部分的数据包还是可以假设下一个数据包从我的下一个recv调用开始?
对于我们的游戏,我认为我们需要每秒发送4个大约20字节的数据包。

如果可能的话,请将这四个包合并成一个。开销会更小。 - DarkDust
我猜想你是指“数据包”而不是“软件包”,或者是一条可以分成多个数据包的消息? - Steve-o
假设您有最小数据包大小的保证,这将允许您在每次更新中发送更多信息:https://dev59.com/-HNA5IYBdhLWcg3wEpkU - Steve-o
1个回答

2
最常见的情况是:一方发送消息,另一方没有收到任何东西。
引用: 是否可能发送数据包并在连接的另一端接收其中的一部分?
实际上不可能,即使消息很大并且被分段,也不像TCP那样。在UDP中,每个消息都是独立的,你要么完全获取它,要么什么也得不到。
因此,你应该在一个循环中使用recvfrom来接收并处理数据。明显地,你应该让你的应用程序能够防止消息丢失,这样缺失的消息不会导致程序崩溃。

在Linux上使用UDPlite可以接收部分数据包,对于流媒体视频非常有用,但对于几乎所有其他内容都没有用处。 - Steve-o

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接