cocos2dx解决苹果正版ipv6的问题
苹果官方出了新的规定,要求新上架的app都必须单独支持ipv6-only的网络。
具体的要求链接:https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW13
热心的网友来了个中文版本的:
http://kepenj.me/2016/05/22/Supporting-IPv6/
全民神魔跟三打白骨精两个项目用的还是两年前的cocos2dx3.0rc版本,明显各种不支持。而且我们自己重写了socket,所以需要修改的地方有下面三个:
1.curl
开始的时候,自己上curl上了个最新的源码,替换掉旧的,结果不行。
然后发现原来还有个libcurl.a的库要替换的。一并替换了,也是不行的。
然后就把电脑里的好几个版本都拿去替换,还是不行。
最后,实在没办法,跑去cocos2d-x官网看有没有相关历史版本可以尝试使用的。结果看到这个:
[3.11.] 支持IPV6-Only网络
[3.11] Chipmunk升级到v7.0.1
[3.11] JSB使用新的内存模型,在JS脚本不需要关心对象的生命周期,该特性默认关闭
[3.11] CURL升级到v7.
[3.11] OpenSSL升级到v1..2g
[3.11] 可以使用VSCode或者新版本的Firefox调试JSB程序
[3.11] 全面升级 WebGL 渲染器
也就是官网特地加多个版本,去解决这个IPV6-Only网络的问题。
知道这个就好办了,直接下载最新的引擎。拿里面的关于curl的库跟源码对旧项目进行替换。
a库那里有个问题稍微测试下,旧版本的cocos2dx只有libhcurl.a,而新版本的是有libcurl.a, libssl.a, libcrypto.a,三个都要加进去,而且还要加到项目的引用。
KLXFCVTRL9.png)
2.host to ip
域名到ip的转换。
我们的服务器是配置了域名,然后把客户端连接的时候,先进行域名到ip的转换。再用ip去连接服务器。
原来我们用的是 gethostbyname的方法去获取ipv4的ip。上面发的链接里有提到这个问题,ipv6要用gethostbyname2。
也是做了尝试,实在c语言水平有限,而且也不知道怎么去判断网络是ipv4还是ipv6的问题。
最后找到了另外一个域名转换ip的方法。就是用getaddrinfo,这个方法的好处在于,解决了转换IP,又解决了判断网络。
这个是oc代码。
- (NSString *) getIPWithHostName:(const NSString *)hostName {
struct addrinfo * result;
struct addrinfo * res;
char ipv4[];
char ipv6[];
int error;
BOOL IS_IPV6 = FALSE;
bzero(&ipv4, sizeof(ipv4));
bzero(&ipv4, sizeof(ipv6));
error = getaddrinfo([hostName UTF8String], NULL, NULL, &result);
if(error != ) {
NSLog(@"error in getaddrinfo:%d", error);
return nil;
}
for(res = result; res!=NULL; res = res->ai_next) {
char hostname[] = "";
error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, , NULL, , );
if(error != ) {
NSLog(@"error in getnameifno: %s", gai_strerror(error));
continue;
}
else {
switch (res->ai_addr->sa_family) {
case AF_INET:
memcpy(ipv4, hostname, );
break;
case AF_INET6:
memcpy(ipv6, hostname, );
IS_IPV6 = TRUE;
default:
break;
}
NSLog(@"hostname: %s ", hostname);
}
}
freeaddrinfo(result);
if(IS_IPV6 == TRUE) return [NSString stringWithUTF8String:ipv6];
return [NSString stringWithUTF8String:ipv4];
}
3.socket
ipv6里面,对socket的创建及连接都需要有相关的修改。
感谢这位仁兄提供的解决方法。
http://blog.csdn.net/hepeng597/article/details/7803277
照着上面这个链接的对比方法,对socket进行修改即可。
这里有个小技巧,如果有需要对连接地址进行网络判断的话,可以判断ip地址里是否有冒号 ":"
c语言里可以用这个判断 strchr(server, ':') != NULL
cocos2dx解决苹果正版ipv6的问题的更多相关文章
- 解决苹果mac远程桌面无VDI客户端
解决苹果mac远程桌面云aDesk无VDI客户端 因集团办公工作需要使用桌面云aDesk 在深信服官网并未有mac 的VDI Client客户端 mac电脑可通过Google浏览器访问VDI的服务器地 ...
- 配置阿里云ECS支持IPv6,解决苹果app审核失败问题
前几天iOS的App提交给苹果审核没通过,给出的原因是:该应用在 IPv6 的环境下无法使用.检查发现:阿里云优化过的系统没有启用IPv6协议,需要配置启用一下,但是只单独启用IPv6也是无法直接提供 ...
- 苹果审核ipv6海外解决思路-About APP Store
原始简书文章地址(也是我自己的) 首先声明,一我不负责涉及你们内部服务器. 二是好好读文章,别人能过,你们也能过 苹果6月1日出的IPV6协议阻碍了国内大多数积极开发者,我司也不外乎,经过三次被拒后, ...
- 用尽洪荒之力解决Apple Store ipv6审核通关---linux服务器支持ipv6
强势的库克时代到来,苹果开启了强制IPV6审核,大家也知道中国现在的情况,除了教育网实验性的支持IPV6,ISP运营商还不支持,想必大家都陆陆续续的遭受到了苹果无情的拒绝,以前开个加急,审核 ...
- js解决苹果移动端300ms延迟的问题
做移动端页面开发的可能会了解到,ios系统click事件会有卡顿的现象,这个问题的根源是苹果本身自带的safari有双击放大页面的功能,再次双击会返回到原始尺寸,所以在第一次点击的系统会延迟300ms ...
- 解决苹果电脑(mac)管理员账户变成了普通用户后不能解锁用户与群组的问题
亲们,我先说说前因,然后再说一下解决方法. 前因 今天不知怎么就想把苹果电脑原来的名字给改一下,于是就做了下面的操作(你们不要这样做) 1.系统偏好设置→用户与组群→当前管理员用户→(右键)高级选项 ...
- 完美解决苹果电脑mac终端无法输入大写T的问题
[本文出自天外归云的博客园] 最近突然发现我的苹果电脑mac终端无法输入大写字母T,今天终于在同事的帮助下解决了!之前在网上查解决方法,感觉步骤描述欠佳!今天记录一下这个踩坑经验: 完美解决! 首先打 ...
- cocos2d-x解决中文乱码问题的几种办法
昨天改写cocos2d-x的例程,想在其基础上加上一个计分系统.没有分数实在让人没有玩下去的动力! 我在主场景上加上了一个CCLabelTTF,用于显示分数. 但是意外的发现,当内容含有中文时,CCL ...
- [Cocos2d-x]解决Android平台ndk-build时不自动删除外部库
参考链接: http://blog.chinaunix.net/uid-26009923-id-3430612.html http://hi.baidu.com/hpyfei/item/52a2b21 ...
随机推荐
- Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇
前言 前一篇 Unity3D 装备系统学习Inventory Pro 2.1.2 总结 基本泛泛的对于Inventory Pro 这个插件进行了讲解,主要是想提炼下通用装备系统结构和类体系.前两天又读 ...
- UIBUTTON titlelabel.text 不显示
button.titlelabel.text=@"查询";设置后运行发现没事正确显示. 查找后原来UIButton分状态的,textLabel不管用 [button setTitl ...
- [转]DAO层,Service层,Controller层、View层
来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...
- 有一道题,大家能帮我看一下哪里错了吗?c++的
有一道题我不知道是哪里错了,大神们帮忙看一下,谢谢! 试题描述: 在四位自然数中有这样一些特点的数:(1)它们是素数:(2)将这些素数加上45后得到一个新的数值:(3)请同学们在这些新的数值中挑选出: ...
- let和const命令//////////////////////z
let和const命令 let命令 块级作用域 const命令 全局对象的属性 let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的 ...
- jquery 获取父窗口的元素 父窗口 子窗口
一.获取页面元素 取父窗口的元素方法:$(selector, window.parent.document); 那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent ...
- WdatePicker 没有权限 不能执行已释放 Script 的代码
提示 拒绝访问 或 没有权限 或 ' Window.document 或 '$dp' 为空或不是对象 $dp.dd is undefined 之类的错误 SCRIPT70: 没有权限 WdatePic ...
- js中的this,call及apply
在前端网看了这么一篇文章,觉得讲得还不错,不深入但易懂,所以我这里把这个经典的问题也记下来. 1:声明式函数与定义函数表达式 console.log(f1);//f1() console.log(f2 ...
- 深入理解JavaScript闭包【译】
在<高级程序设计>中,对于闭包一直没有很好的解释,在stackoverflow上翻出了一篇很老的<JavaScript closure for dummies>(2016)~ ...
- mysql 修改密码
安装完成后,默认本地登录超级管理员root,密码为空连接服务后(先停止服务,在wamp中运行mysql控制台enterpass:直接回车),执行set password for root@localh ...