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