【问题标题】:how to handle format of the Data in a UDP data Transfer如何处理 UDP 数据传输中的数据格式
【发布时间】:2015-03-10 13:47:13
【问题描述】:

我正在制作一款原型 MMORPG 游戏,并且我了解到最好使用 UDP 来传输玩家动作。所以我必须转移播放器的X,Y对吗?那么如何管理连接的丢包(如果有)。

谁能解释一下这个 UDP 的工作方式,我如何管理我传输的数据的格式。如果有任何数据包丢失会导致格式无用对吗?

【问题讨论】:

  • 谷歌搜索会做得更好!
  • 我做到了,但我不明白如何制作一种不会因丢包而中断的格式:(
  • UDP 传输意味着,您将忽略丢失或没有终点的包。

标签: java c# udp


【解决方案1】:

UDP 是无连接的。每个数据报都是单独单独处理的,一个数据报只能作为一个整体丢失或根本不丢失。

因此,解决您的问题的方法是确保单个数据报包含所需的所有信息。

例如,假设您至少需要发送玩家 ID 以及 X 和 Y 坐标,您可以发送三个 int 值。

有很多方法可以构建数据报本身(以byte[] 发送),但最简单的方法之一是使用BinaryWriter

byte[] BuildDatagram(int playerId, int x, int y)
{
    using (MemoryStream stream = new MemoryStream)
    using (BinaryWriter writer = new BinaryWriter(stream))
    {
        writer.Write(playerId);
        writer.Write(x);
        writer.Write(y);
        writer.Flush();
        return stream.ToArray();
    }
}

请注意,UDP 合理用于玩家位置的原因是,如果您偶尔丢失数据报,这不是什么大问题。同样,多次接收同一个数据报通常也不是什么大问题。最后,以与发送数据报不同的顺序接收数据报并不是大问题(尽管玩家会发现 UDP 可能导致的三个可能问题中最烦人的一个)。

您只想对此类数据使用 UDP。任何你想可靠发送的东西,你要么需要在你的 UDP 实现中添加代码以确保可靠性(这相当复杂,尤其是对于不熟悉网络编程的人来说),或者你会想要为那些使用 TCP各种数据。

【讨论】:

  • 谢谢,这是我正在寻找的答案:D
猜你喜欢
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 2012-03-07
  • 2020-06-23
相关资源
最近更新 更多