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.1] 支持IPV6-Only网络
[3.11] Chipmunk升级到v7.0.1
[3.11] JSB使用新的内存模型,在JS脚本不需要关心对象的生命周期,该特性默认关闭
[3.11] CURL升级到v7.48
[3.11] OpenSSL升级到v1.0.2g
[3.11] 可以使用VSCode或者新版本的Firefox调试JSB程序
[3.11] 全面升级 WebGL 渲染器

也就是官网特地加多个版本,去解决这个IPV6-Only网络的问题。

知道这个就好办了,直接下载最新的引擎。拿里面的关于curl的库跟源码对旧项目进行替换。

a库那里有个问题稍微测试下,旧版本的cocos2dx只有libhcurl.a,而新版本的是有libcurl.a, libssl.a, libcrypto.a,三个都要加进去,而且还要加到项目的引用。

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[128];
    char ipv6[128];
    int error;
    BOOL IS_IPV6 = FALSE;
    bzero(&ipv4, sizeof(ipv4));
    bzero(&ipv4, sizeof(ipv6));

    error = getaddrinfo([hostName UTF8String], NULL, NULL, &result);
    if(error != 0) {
        NSLog(@"error in getaddrinfo:%d", error);
        return nil;
    }
    for(res = result; res!=NULL; res = res->ai_next) {
        char hostname[1025] = "";
        error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, 1025, NULL, 0, 0);
        if(error != 0) {
            NSLog(@"error in getnameifno: %s", gai_strerror(error));
            continue;
        }
        else {
            switch (res->ai_addr->sa_family) {
                case AF_INET:
                    memcpy(ipv4, hostname, 128);
                    break;
                case AF_INET6:
                    memcpy(ipv6, hostname, 128);
                    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

时间: 2024-08-05 05:12:31

cocos2dx解决苹果正版ipv6的问题的相关文章

centos网速特别慢的最佳解决办法 - 关闭ipv6

我使用了centOS,但是发现网速实在是卡得几乎不能上网,连百度都打不开,但是win却飞快. 后来想到偶然记得有一次看过一段话,说到关闭ipv6,测试来一下,果然有效,关闭来ipv6打开网速飞快. 关闭方法,在/etc/modprobe.d/dist.conf结尾添加 alias net-pf-10 off alias ipv6 off 然后保存,重启centOS 即可(by default7#zbphp.com). centos网速特别慢的最佳解决办法 - 关闭ipv6,布布扣,bubuko.

解决苹果mac远程桌面无VDI客户端

解决苹果mac远程桌面云aDesk无VDI客户端 因集团办公工作需要使用桌面云aDesk 在深信服官网并未有mac 的VDI Client客户端 mac电脑可通过Google浏览器访问VDI的服务器地址访问远程:https://172.16.100.xx 注意得https 然后使用用户密码登陆远程桌面 原文地址:https://www.cnblogs.com/liucx/p/12001469.html

解决苹果APP审核需要的IPv6地址的问题

起因: 苹果APP上线被驳回,原因是使用WIFI网络+IPv6地址无法登录. 解决问题概述: 网上有很多中办法解决这个问题,部分是通过IPv4转IPv6的办法,并不是真正的IPv6地址. 我们想通过申请国外具有IPv6地址的VPS,然后安装Nginx转发IPv6的请求到国内的IPv4服务器. 第一步:申请VPS http://bandwagonhost.com 申请一个一年期的支持IPv6地址的VPS,一年费用19.99美元,支持支付宝支付. 第二步:进入后台,申请一个IPv6地址 第三步:设置

5秒钟解决环信ipv6适配问题-b

最近苹果要求app都要适配ipv6,我用的环信2x版本,据我所知环信2.2.5及之后版本才适配了ipv6.怎么检测你的app是否适配了apv6呢?可以自己搭配个ipv6环境,然后在ipv6环境下2.2.5以下版本无法登录.我的是2.2.2版本,之前我尝试把整个sdk换成2.2.5版本,但是因为项目需要改动的地方实在太多放弃了,后来想想既然适配ipv6,应该是和界面和环信用的第三方库之类的关系不大,应该和service有关于是我锁定了EaseMobSDK这个目录下的这三个文件夹,后来试了了下只要把

用尽洪荒之力解决Apple Store ipv6审核通关---linux服务器支持ipv6

强势的库克时代到来,苹果开启了强制IPV6审核,大家也知道中国现在的情况,除了教育网实验性的支持IPV6,ISP运营商还不支持,想必大家都陆陆续续的遭受到了苹果无情的拒绝,以前开个加急,审核时间也就一天,快的话2小时就可以过,而现在一次又一次的拒绝,让国内开发者苦不堪言.不过聪明的中国人,不会被这样的问题打倒的,中国有句古话叫道高一尺,魔高一丈.公司的两个APP在经过两轮苹果残忍拒绝后,在7月底还是审核通过了.在此跟大家分享一下审核通关的经验.最近看大家都在聊ipv6审核,有的运气好,没做任何改

M-2 Boot Camp解决苹果电脑安装Windows硬件不兼容问题

要知道很多人喜欢苹果电脑,但是买来后发现苹果自带的系统使用不习惯.某些功能不能实现.所以才安装了Windows,但是装完Windows后才发现,电脑出了一些问题. 问题描述:Mac笔记本在使用传统的Ghost安装操作系统方法后,安装完的系统与苹果本身的硬件不兼容.导致很多设备无法使用.可能出现的问题:摄像头不能使用.苹果的键盘上某些功能键不能使用,导致不能调节声音与屏幕亮度.触摸板功能运作不正常,无法使用右键. 解决方法:Boot Camp是苹果是出的一种软件.它可以实现苹果设备上的双系统.而它

阿里云针对苹果官方ipv6审核的综合解决方案

前言 因业务需求 公司APP需要在ios系统上运行需要改系统ipv6 2016年6月1号之后苹果应用上传AppStore审核要求全面支持ipv6,虽然只是一个简单的审核要求,但却给中国区的开发者带来了不小的麻烦,因为众所周知的原因,国内的IPV6支持的比较差,所以包括ipv6环境测试在内的ipv6适配要求,着实是需要有一套解决方案.这里都是废话,下面就自己的解决方案开始做方案介绍. 代码层支持 按照苹果官方要求做iOS代码适配ipv6,这里涉及到了跟网络相关的第三方库的时候,按照我自己的经验,做

解决苹果电脑(mac)管理员账户变成了普通用户后不能解锁用户与群组的问题

亲们,我先说说前因,然后再说一下解决方法. 前因 今天不知怎么就想把苹果电脑原来的名字给改一下,于是就做了下面的操作(你们不要这样做) 1.系统偏好设置→用户与组群→当前管理员用户→(右键)高级选项 然后就账户名称和全名都改了. 2.然后就哭了,我的管理员账户就变成了普通用户,不能解锁用户和群组了,但还能正常使用. 3.然后就开始了寻找解决之路. 4.大家以后要改就只改全名就好,其他的不要动,如果动了 管理员权限 就没有了. 解决的方法 思路 先建一个新(管理员账户1)把原来的账号提升成(管理员

完美解决苹果电脑mac终端无法输入大写T的问题

最近突然发现我的苹果电脑mac终端无法输入大写字母T,今天终于在同事的帮助下解决了!之前在网上查解决方法,感觉步骤描述欠佳!今天记录一下这个踩坑经验: 完美解决! 首先打开终端输入以下命令: cd ~ vim .inputrc 在~目录下通过ls命令是无法看到这个inputrc文件的!好隐蔽! 然后修改文件内容,注意TAB后面的空格一定要去掉! set completion-ignore-case on set show-all-if-ambiguous on TAB:menu-complete