1

这是摘要,我将数据包从服务器发送到在同一台计算机上运行的客户端。由于某种原因,发送的数据包与接收的数据包不同。

这是详细信息:

数据包是使用带有调用函数的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 会以某种方式混淆。第 6 个字节是明显改变的打包 ID,以及后面的 3 个字节。

我怀疑该错误是由数据包的长度引起的,因为较小的数据包似乎发送时没有任何可检测到的错误,但是我了解RakNet 会自动处理数据包损坏并在数据包太大时在内部拆分数据包。

任何帮助表示赞赏。

4

1 回答 1

0

那么对于任何有同样问题的人来说,这里是解决方案。

RakNet 时间戳是 32 位或 64 位,具体取决于您的构建配置。在这种情况下,我使用 64 位构建发送 32 位时间戳。这是一个禁忌,因为 RakNet 将更改它认为是时间戳的位,以说明计算机之间的相对时间。

于 2016-03-24T15:00:33.490 回答