如何让RakNet更可靠?

时间:2016-03-24 14:44:56

标签: c++ sockets networking raknet

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

以下是详细信息:

使用 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 会自动处理数据包损坏并在内部拆分数据包如果太大。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

对于有同样问题的人来说,这就是解决方案。

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