RakNet iOS of Unity 5.x 的应用il2cpp的bug规避

由于Unity的iOS版本需要为了运行效率,需要应用il2cpp模式。

但是RakNet该网络库的一些接口通过il2cpp导出之后,会出现bug。

最开始的方案是想导入libRakNet.a静态库,该库通过xcode编译成iOS版本。

该libRakNet.a库,应用于原生的ObjectC工程是没问题,但是应用到unity通过il2cpp之后,就出现连接不成功的情况。

进一步分析:在服务器上单步之后,发现服务器可以接收到请求连接的消息,但是接收到的消息头解析是错乱的。

也在stackOver上找到了别人也有遇到过类似问题,详细

修改方案是将 DatagramHeaderFormat 结构体中的 serialize 方法名字重命名下,在文件ReliabilityLayer.cpp 重新编译成静态库之后,发现请求协议头解析是改正确了。

但是连接还是不成功。

继续分析,发现是服务器在请求处理连接请求的时候,会把该客户端还没完成三次握手的情况下,将该客户端判定为超时,直接关闭该连接。

怀疑还是在connection_time的指通过il2cpp导出的C++代码中还存在问题。因为要的比较急,就没有继续研究下去,基本上可以确定是il2cpp的bug。

放弃了使用静态库方案。

因为il2cpp本身导出就是C++代码,那就直接将raknet的源码导入到Plugin/iOS/Raknet/ 目录下,果然可行。

一、在加入前需要加入两部分代码:

1、RakNet->Source下的全部加载

2、通过Swig导出的导出接口文件也需要放进去,但是需要将RakNet_wrap.cxx 的后缀修改成cpp,RakNet_wrap.cpp 和RakNet_wrap.h两个文件也需要加入,否者在C#中是获取不到接口的。

二、导出成xcode工程之后,开始编译,

因为有动态类型转换的应用,所以编译时会报错,在XCode的 build setting中将Enable C++ runtime Types 修改yes

如果是使用xcodebuild编译的话,就带上 GCC_ENABLE_CPP_RTTI = YES 编译选项就不会报错。

打包导出ipa测试网络连接ok了。


修改之后的代码连接 在此

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,496评论 4 61
  • 今天是2017年11月19日,风变实习3个半月的日子。技术上没有成长起来去胜任好工作,以至于推迟了转正时间,又多一...
    游脑诗阅读 1,333评论 0 0
  • 见字如面,如雁带去思念;见字如面,如歌抚慰流年。消失了时空,怀念成相见。信中你我,定格成永远的容颜。 文字有温度,...
    花生栗子阅读 4,966评论 0 1
  • 感恩环卫工人把我们店前刷的干干净净,每隔俩天就用水枪把门前的道路刷一遍。看着干净的路面心情都是美的。 感恩今天一位...
    孔美荣阅读 1,432评论 0 0

友情链接更多精彩内容