Unity3D + iOS (il2cpp) 上的 Raknet 连接问题
Raknet connection issue on Unity3D + iOS (il2cpp)
我有一个奇怪的问题 运行 iOS 使用 Unity3D 的最新版本的 Raknet:我在尝试连接到服务器时得到 CONNECTION_ATTEMPT_FAILED
。
现在让我详细说明这个问题:
在 ObjectiveC 应用程序中使用时,完全相同的库连接正常,因此问题似乎与 Unity3D 相关。
我已经设法查明我的问题位于 Raknet 可靠性层:
显然,在连接过程的最后一步(连接握手完成时),服务器的可靠性层认为从客户端收到的 ID_CONNECTION_REQUEST
数据包是确认而不是消息.因此它不回答。最终,经过几次尝试(以及 10 秒的超时),客户端因 CONNECTION_ATTEMPT_FAILED
错误而失败。
有人有想法吗?当我设法获得更多信息时,我会更新问题。
更新
我们正在使用 Unity3D 5.1.1f1
我们设法找到了解决方法!有关详细信息,请参阅答案。由于变通方法并没有告诉我们太多关于真正发生的事情,我很乐意听到这里的一些 C++/XCode/Unity/iOS/AppleLLVM6.1 专家解释真正发生的事情。
问题是 iOS 客户端未正确生成 Raknet header。即我们发送 ACK 消息代替 simple
数据包。消息的其余部分被服务器视为垃圾,数据包被丢弃。在超时之前,客户端不断尝试发送损坏的握手数据包几次。
这并没有告诉我们原因,不是吗?显然 class DatagramHeaderFormat
的 serialize
方法没有被调用,因为它应该在 运行 Raknet in Unity (iOS) 时被调用。链接了其他东西(我不知道是什么)代替此方法,并用损坏的 header.
填充 BitStream
我很确定没有调用序列化方法,因为 printf
来自内部的调用没有显示在控制台中。
我们将 DatagramHeaderFormat::serialize
重命名为 DatagramHeaderFormat::serializeHeader
并且......瞧,它起作用了。
现在我只想了解编译器做了什么(以及为什么)。
我有一个奇怪的问题 运行 iOS 使用 Unity3D 的最新版本的 Raknet:我在尝试连接到服务器时得到 CONNECTION_ATTEMPT_FAILED
。
现在让我详细说明这个问题:
在 ObjectiveC 应用程序中使用时,完全相同的库连接正常,因此问题似乎与 Unity3D 相关。
我已经设法查明我的问题位于 Raknet 可靠性层:
显然,在连接过程的最后一步(连接握手完成时),服务器的可靠性层认为从客户端收到的 ID_CONNECTION_REQUEST
数据包是确认而不是消息.因此它不回答。最终,经过几次尝试(以及 10 秒的超时),客户端因 CONNECTION_ATTEMPT_FAILED
错误而失败。
有人有想法吗?当我设法获得更多信息时,我会更新问题。
更新
我们正在使用 Unity3D 5.1.1f1
我们设法找到了解决方法!有关详细信息,请参阅答案。由于变通方法并没有告诉我们太多关于真正发生的事情,我很乐意听到这里的一些 C++/XCode/Unity/iOS/AppleLLVM6.1 专家解释真正发生的事情。
问题是 iOS 客户端未正确生成 Raknet header。即我们发送 ACK 消息代替 simple
数据包。消息的其余部分被服务器视为垃圾,数据包被丢弃。在超时之前,客户端不断尝试发送损坏的握手数据包几次。
这并没有告诉我们原因,不是吗?显然 class DatagramHeaderFormat
的 serialize
方法没有被调用,因为它应该在 运行 Raknet in Unity (iOS) 时被调用。链接了其他东西(我不知道是什么)代替此方法,并用损坏的 header.
BitStream
我很确定没有调用序列化方法,因为 printf
来自内部的调用没有显示在控制台中。
我们将 DatagramHeaderFormat::serialize
重命名为 DatagramHeaderFormat::serializeHeader
并且......瞧,它起作用了。
现在我只想了解编译器做了什么(以及为什么)。