zoukankan      html  css  js  c++  java
  • 关于升级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。

  • 相关阅读:
    mysql
    新建mysql容器
    Storm中并行度原来是这样计算的(1.0.1版本)
    集中式系统和分布式系统
    hadoop错误:Does not contain a valid host:port authority
    Linux配置ntp时间服务器(全)
    vi/vim 消除搜索后的关键字高亮
    雄鹰与蜗牛
    如何查看HBase的HFile
    MemoryUsage:监测java虚拟机内存使用
  • 原文地址:https://www.cnblogs.com/xyptechnology/p/8343466.html
Copyright © 2011-2022 走看看