如何处理UDP数据传输中的数据格式

时间:2015-03-10 13:47:14

标签: java c# udp

我正在制作MMORPG原型游戏,我已经读过使用UDP传输玩家动作的最佳方式。所以我必须转移玩家的X,Y吗?那么如何管理连接的丢包(如果有的话)。

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

1 个答案:

答案 0 :(得分:0)

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可能导致的三个可能问题中最令人讨厌的)。 / p>

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