• 关于升级cocos2d-x网络库来支持ipv6、https,以及socket怎么支持ipv6


    注:以下说明均是基于Cocos2d-x v2.x引擎下

    1.支持https

    1.首先跳过服务端、及后台,因为使用的https地址 有SSL证书,所以使用cocos的前端只要网络库支持就够了,先升级完cocos引擎对应网络库.链接如下,自行参考。

    http://discuss.cocos2d-x.org/t/supporting-ipv6-only-networks/29266/11

    https://github.com/cocos2d/cocos2d-x/pull/15666/commits/43dd696750014efa9b0419a59f72ba1c4cdaba50 

    2.修改socket content函数

    客户端通过getaddrinfo解析域名,记得freeaddrinfo释放空间

    bool CCSocket::connect(const char* ip, unsigned short port)

    {

     

        if (isConnent) {

            return true;

        }

        

        char strIP[100];

        sprintf(strIP,"%s",ip);

        char strPort[100];

        sprintf(strPort,"%d",port);

        struct addrinfo *ailist, *aip;

        struct addrinfo hint;

        struct sockaddr_in *sinp;

        int err;

        char seraddr[INET_ADDRSTRLEN];

        short serport;

        

        hint.ai_family = 0;

        hint.ai_socktype = SOCK_STREAM;

        hint.ai_flags = AI_CANONNAME;

        hint.ai_protocol = 0;

        hint.ai_addrlen = 0;

        hint.ai_addr = NULL;

        hint.ai_canonname = NULL;

        hint.ai_next = NULL;

        if ((err = getaddrinfo(strIP, strPort, &hint, &ailist)) != 0) {

            CCLOG("getaddrinfo error: %s ", gai_strerror(err));

            return -1;

        }

       

        CCLOG("getaddrinfo ok ");

        for (aip = ailist; aip != NULL; aip = aip->ai_next) {

            

            sinp = (struct sockaddr_in *)aip->ai_addr;

            if (inet_ntop(sinp->sin_family, &sinp->sin_addr, seraddr, INET_ADDRSTRLEN) != NULL)

            {

                CCLOG("server address is %s ", seraddr);

            }

            serport = ntohs(sinp->sin_port);

            CCLOG("server port is %d ", serport);

            if ((sock = socket(aip->ai_family, SOCK_STREAM, 0)) < 0) {

            

                CCLOG("failed to create socket ");

                return false;

            }

            printf("create socket ok ");

            if (::connect(sock, aip->ai_addr, aip->ai_addrlen) < 0) {

                CCLOG("failed to connect ");

                ::close(sock);

                return false;

            }

            break;

        }

        freeaddrinfo(ailist);

        isConnent = true;

        CCDirector::sharedDirector()->getScheduler()->scheduleSelector(schedule_selector(CCSocket::update), this, 0, false);

        

        return true;

        

    }

     

    3。搭建测试环境

     

    参考链接https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1

    不过注意 share you connection form  选择是 以太网

     

    生成NAT64网络测试自己的app。

  • 相关阅读:
    Zookeeper全解析——Paxos作为灵魂(转)
    你真的会开发测试框架?
    使用Hypothesis生成测试数据
    poium测试库之JavaScript API封装原理
    PHP接口自动化测试框架实现
    Web项目如何做单元测试
    如何在Appium中使用AI定位
    我写了个项目,帮你学习HTTP接口测试!
    性能测试浅谈
    Web测试框架SeleniumBase
  • 原文地址:https://www.cnblogs.com/xyptechnology/p/8343466.html
Copyright © 2020-2023  润新知