Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理UDP数据传输中的数据格式_Java_C#_Udp - Fatal编程技术网

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

Java 如何处理UDP数据传输中的数据格式,java,c#,udp,Java,C#,Udp,我正在制作一个MMORPG原型游戏,我读到最好使用UDP传输玩家的动作。所以我必须转移球员的X,Y,对吗?那么,如何管理连接的数据包丢弃(如果有) 有人能解释一下UDP的工作方式吗?我该如何管理传输的数据格式。如果任何数据包丢失,将导致格式无效,对吗?UDP是无连接的。每个数据报都是单独处理的,一个数据报只能作为一个整体丢失,或者根本不丢失 因此,解决您的问题的方法是确保单个数据报包含所需的所有信息 例如,假设您至少需要发送一个玩家ID以及一个X和Y坐标,您可以发送三个int值 构建数据报本身有

我正在制作一个MMORPG原型游戏,我读到最好使用UDP传输玩家的动作。所以我必须转移球员的X,Y,对吗?那么,如何管理连接的数据包丢弃(如果有)


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

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

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

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

构建数据报本身有很多方法(以
字节[]
的形式发送),但最简单的方法之一是使用
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。

谷歌搜索会做得更好!是的,但我不明白如何制作一种不会因丢弃数据包而中断的格式:(UDP传输意味着,您将忽略丢失的数据包或没有端点的数据包。谢谢,这是我搜索的答案:D