这是总结,我从服务器向在同一台计算机上运行的客户端发送数据包。由于某种原因,发送的数据包与收到的数据包不同。
详情如下:
数据包是使用 RakNet 和调用函数发送的:
rakPeer->Send(&bitStream, MEDIUM_PRIORITY, RELIABLE_ORDERED, 0, UNASSIGNED_RAKNET_GUID, true);
这是服务器发送的数据包的前 10 个字节:27,50,39,133,202,135,0,0,0,99 ... 1180 更多字节
这是接收客户端看到的数据包的前 10 个字节(注意:50% 的时间是正确的,另一半是这样的):27,50,43,40,247,134,255,255,255,99 ... 1180 更多字节
第一个字节是ID_TIMESTAMP
。字节 2-5 包含时间戳,我认为 RakNet 以某种方式弄乱了它。 Byte 6是packed ID,明显变化了,还有后面的3个bytes。
我怀疑错误是由数据包的长度引起的,因为较小的数据包似乎在发送时没有任何可检测到的错误,但是我知道 RakNet 会自动处理数据包损坏并在内部拆分如果包太大。
感谢任何帮助。
对于遇到相同问题的任何人,这是解决方案。
RakNet 时间戳为 32 位或 64 位,具体取决于您的构建配置。在这种情况下,我使用 64 位构建发送 32 位时间戳。这是一个禁忌,因为 RakNet 会更改它认为是时间戳的位,以说明计算机之间的相对时间。
我是一名优秀的程序员,十分优秀!