2016年6月1日,苹果出台新政策,要求所有提交Apple Store渠道的包必须要支持IPv6。这昂无疑让很多人心头一凉。
果然在这几天很多公司的产品都被打回来了。我们公司也不例外,提交了几个包,只有一款侥幸逃过一劫,其它全部被打回。
碰到这种问题,第一时间就去调查了下,首先肯定是去构建一个ipv6网络测试。面临着一大堆的问题,这个是客户端还是服务端的问题?如果是服务端的问题,怎么处理,服务端需要更改什么内容?如果是客户端的问题又怎么办呢?……
慌归慌,事情还是要去处理,首先去百度科普下苹果的这条新规的规则,然后再去熟悉下什么是ipv6(尴尬脸~)。这个就不赘述了,自行度娘。

  1. 测试ipv6网络,首先要搭建好一个ipv6的网络, 百度一大堆。

  2. ipv6与ipv4的差别有:

    (1) IPv4是“.”来分割的,但是IPv6是“:”来分割的。
    (2)Ipv6使用域名
    (3)Ipv6创建socket时使用的参数为 ( socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); ), 而Ipv4创建socket时使用的参数为 ( socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) )

    对于Ipv6 socket的创建及连接 可以参考这个链接
    http://blog.csdn.net/hepeng597/article/details/7803277

    Cocos2d-x开发系列 苹果IPv6 only问题处理 可以参考这个链接
    http://blog.csdn.net/diyal/article/details/51645207

以下是创建socket的相关代码

——————————————————————————————————————

本人的代码(包含ipv6 下 socket的创建与连接。 代码中用到了两个方法,分别为判断网络环境与域名解析函数)

 m_host = domainToIP(m_host.c_str());  // 将域名转换成ipv6的地址int sockfd, len;struct sockaddr_in6 dest;char buffer[1024];m_hSocket = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);// 创建socketif (m_hSocket < 0) {cocos2d::log("socket error");}// 初始化服务器地址肯端口信息bzero(&dest, sizeof(dest));dest.sin6_family = AF_INET6;dest.sin6_port = htons(atoi(Value(m_iport).asString().c_str()));if (inet_pton(AF_INET6, m_host.c_str(), &dest.sin6_addr) < 0) {cocos2d::log("pton error");}int iss = connect(m_hSocket, (struct sockaddr*) &dest, sizeof(dest));// 连接服务器if (iss != 0) {cocos2d::log("connect error");return false;}cocos2d::log("socket connect Ok");

——————————————————————————————————————

一、 添加网络判断的函数

//判断是否IPv6网络
staticbool isIPV6Net(conststd::string domainStr = "www.baidu.com")
{bool isIPV6Net = false;struct addrinfo *result = nullptr,*curr;struct sockaddr_in6 dest;bzero(&dest, sizeof(dest));dest.sin6_family  = AF_INET6;int ret = getaddrinfo(domainStr.c_str(),nullptr,nullptr,&result);if (ret == 0){for (curr = result; curr != nullptr; curr = curr->ai_next){switch (curr->ai_family){case AF_INET6:{isIPV6Net = true;break;}case AF_INET:break;default:break;}}}freeaddrinfo(result);return isIPV6Net;
}

二、添加域名解析函数

static std::string domainToIP(const char* pDomain)
{if (isIPV6Net()){struct addrinfo hint;memset(&hint, 0x0, sizeof(hint));hint.ai_family = AF_INET6;hint.ai_flags = AI_V4MAPPED;addrinfo* answer = nullptr;getaddrinfo(pDomain, nullptr, &hint, &answer);if (answer != nullptr){char hostname[1025] = "";getnameinfo(answer->ai_addr,answer->ai_addrlen,hostname,1025,nullptr,0,0);char ipv6[128] = "";memcpy(ipv6,hostname,128);CCLOG("domainToIP addrStr:%s", ipv6);return ipv6;}freeaddrinfo(answer);}else{struct hostent* h = gethostbyname(pDomain);if( h != NULL ){unsigned char* p = (unsigned char *)(h->h_addr_list)[0];if( p != NULL ){char ip[16] = {0};sprintf(ip, "%u.%u.%u.%u", p[0], p[1], p[2], p[3]);return ip;}}}return "";
}

cocos2dx ipv6处理相关推荐

  1. cocos2d-x AssetsManager libcurl使用心得

    libcurl使用心得 最新正在写cocos客户端更新的逻辑,研究了一下cocos2d-x自带的Libcurl,以下是自己在使用过程中的心得和遇到的未解问题,希望大家一起讨论一下,欢迎大家指导. 首先 ...

  2. cocos2d-x3.10 适配 IPV6

    cocos 依赖的三方库涉及到 IPV6 问题的库为 curl, websocket, cocos 自己提供的模块需要适配的有: HttpClient AssetsManagerEx SocketIO ...

  3. php websocket ipv6,原生socket支持ipv6

    以前cocos2d-x的项目里都使用的是libwebsocket,如果想支持ipv6,只需要升级相应的库即可,现在有个项目里使用的是原生socket,如果要支持ipv6可能需要进行一些代码的改造,具体 ...

  4. IPv6 与 IPv4现状

    IPv6 与 IPv4现状 一.概述 (1) IPv4可提供bai4,294,967,296个地址,IPv6将原来的32位地址空间增大du到128位,数目是zhi2的128次方.能够对地球上每平方米d ...

  5. DCN-cs6200 ipv6 isatap 隧道

    DCN-cs6200 ipv6 isatap 隧道: SW-1配置: CS6200-28X-EI>enable CS6200-28X-EI#config terminal CS6200-28X- ...

  6. DCN-cs6200 ipv6 6to4隧道

    DCN-cs6200 ipv6 6to4隧道: SW-1配置: CS6200-28X-EI>enable CS6200-28X-EI#config terminal CS6200-28X-EI( ...

  7. IPv6地址分类及表示方法

    对于IPv4地址,我们知道分为A类.B类.C类.组播地址和留用地址,几大类,ABC类地址中还会有不同功能的如广播地址.私有地址等类型.那么IPv6的地址是怎么分类的呢?本文就带大家初步了解一下. 先说 ...

  8. cocos2d-x 3.10 PageView BUG

    cocos2d-x 3.10 PageView 拖动滚动到下一个单元,没事件,3.11有修复. 转载于:https://www.cnblogs.com/qianwang/p/6106324.html

  9. cocos2d-x 音效中断问题

    做跑酷重吃金币播音效时,播放其它音效会使得音效所有中断,最后发现时音效上限的问题,2.2.3默认的似乎是5个音效,改动成50后问题解决. 在java中的org.cocos2dx.lib包下有一个Coc ...

  10. [转]cocos2d-x

    Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎,使用 C++ 开发,基于OpenGL ES,基于Cocos2d-iphone,支持 WOPhone, iOS 4.1, Android 2. ...

最新文章

  1. 服务器模型——从单线程阻塞到多线程非阻塞(下)
  2. Java开发中业务层入参校验详细解析
  3. 华为鸿蒙系统确认适配高通,华为鸿蒙系统确认适配高通/联发科手机!曝OV魅族有意采用...
  4. centos samba 配置
  5. 问题之sqlyou的使用
  6. linux 分区 备份软件下载,硬盘分区备份(Image For Windows)
  7. 小程序picker组件中的(普通选择器:mode = selector)
  8. RabbitMQ和Kafka的显著差异(3)
  9. ubuntu配置vsftpd记录
  10. jBPM工作流 之JBPM4
  11. lpx寒假作业案例6
  12. matlab在三维人体及服装建模上的应用,Matlab在三维人体及服装建模上的应用
  13. 【新书推荐】大唐的裂变(套装共5册)(王澄明等著)
  14. EOS区块链浏览器(查询账户工具)
  15. 蓝屏终止代码:WHEA INTERNAL ERROR
  16. 马桶的尺寸是多少 马桶尺寸是多大2022
  17. 经典算法研究系列:五、红黑树算法的实现与剖析
  18. Java学习软件安装详解
  19. 三相PFC程序30KW充电桩 采用目前最常用的TI DSP数字信号处理芯片
  20. 破解滑块(极验)验证码思路分享

热门文章

  1. Java程序员月薪三万的技术达到什么程度?
  2. 由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断
  3. 手机和电脑传输文件又有了新选择
  4. flash player 11.2 64位 linux,Flash Player 11.2新版发布
  5. phalcon mysql_Phalcon 数据库操作总结
  6. 175个常用诗词语句出处
  7. 吃糖果 (HDU-1205)(鸽笼原理(抽屉原理))
  8. 怎么去思考一个问题,提高解决问题的能力
  9. 山大计算机学院夏令营2021,关于举办山东大学2021年暑期未来数学家夏令营的通知...
  10. 数据分析报告怎么写(一)