【问题标题】:what are the possible UDP data transfer errors?什么是可能的 UDP 数据传输错误?
【发布时间】:2011-09-24 15:20:47
【问题描述】:

我们将开发一款支持互联网多人游戏的游戏。因为它是一个交互式游戏,我知道我必须使用 UDP 来减少连接延迟,但我想知道使用 UDP 连接传递的包中可能发生的错误是什么?在我所见的任何地方,他们都说 UDP 提供了“尽力而为”,但没有人给出完整的解释这是什么意思。在阅读了一些文章后,我仍然有两个问题:

  1. 是否可以在连接的另一端发送一个包并接收它的一部分?
  2. 如果您对第一个问题的回答是正确的,接下来的包裹会发生什么?我应该等待包裹的其余部分,还是可以假设下一个包裹从我的下一个 recv 电话开始?

对于我们的游戏,我认为我们需要每秒发送 4 个大约 20 字节的包。

【问题讨论】:

  • 如果可能,尝试将这四个包合二为一。开销会更小。
  • 我认为“数据包”是指“包”而不是“包”或可以分割成多个数据包的消息?
  • 请考虑您对最小数据包大小的保证,这允许您在每次更新时发送更多信息:stackoverflow.com/q/1098897/175849

标签: sockets udp client-server


【解决方案1】:

最常见的情况是:一方发送消息,另一方什么也没收到。

是否可以发送一个包裹并在另一个接收部分 连接结束?

并非如此,即使消息很大并且变得支离破碎。与TCP 不同,UDP 中的每条消息都是独立的。你要么完全得到它,要么什么都没有。

所以你应该做的只是recvfrom循环中的事情并处理它们。显然,您应该使您的应用程序不受消息丢失的影响,这样丢失的消息就不会导致它崩溃。

【讨论】:

  • 在带有UDPlite 的 Linux 上,您可以接收部分数据包,这对流式视频很有用,但对其他几乎没有用处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 2016-02-11
  • 1970-01-01
相关资源
最近更新 更多