Unity3D + iOS上的Raknet连接问题(il2cpp)

时间:2015-07-16 17:02:41

标签: ios unity3d raknet

我在使用Unity3D在iOS上运行最新版本的Raknet时遇到了奇怪的问题:尝试连接服务器时我得到CONNECTION_ATTEMPT_FAILED

现在让我详细说明问题:

他在ObjectiveC应用程序中使用时完全相同的库连接,因此问题似乎与Unity3D相关。

我已经设法确定我的问题位于Raknet可靠性层:

显然,在连接过程的最后一步(当连接握手已完成时),服务器的可靠性层认为从客户端接收的ID_CONNECTION_REQUEST数据包是确认而不是消息。因此它没有回答。经过几次尝试(以及10秒超时)后,客户端失败并出现CONNECTION_ATTEMPT_FAILED错误。

有人在那里作为一个想法吗?当我设法获得更多信息时,我会更新问题。

更新

我们正在使用Unity3D 5.1.1f1

我们设法找到了解决方法!有关更多信息,请参阅答案由于解决方法并没有告诉我们真正发生的事情,我很乐意听到一些C ++ / XCode / Unity / iOS / AppleLLVM6.1专家在这里解释究竟发生了什么。

1 个答案:

答案 0 :(得分:0)

问题是iOS客户端没有正确生成Raknet标头。即我们发送ACK消息代替simple数据包。消息的其余部分被服务器视为垃圾,数据包被丢弃。在计时之前,客户端一直试图发送损坏的握手包几次。

这并没有告诉我们原因,不是吗?显然,类serialize的{​​{1}}方法没有被调用,因为在Unity(iOS)中运行Raknet时应该这样做。其他东西(我也不知道是什么)被链接到了这个方法的位置,并且用DatagramHeaderFormat填充了一个损坏的标题。

我很确定序列化方法没有被调用,因为来自内部的BitStream调用没有在控制台中显示。

我们将printf重命名为DatagramHeaderFormat::serialize并且......瞧,它有效。

现在我只想了解编译器的内容(以及原因)。