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。

  • 相关阅读:
    Python 基础【第三篇】输入和输出
    把linux可执行程序做成一个服务[转]
    linux 下启动程序的时候会显示坏的解释器,或者没有那个文件
    利用GDB进行多线程调试
    两个结构体ifconf和ifreq
    centos系统修改网络配置注意事项
    yum错误:rpmdb: BDB0113 Thread/process 4227/139813012539200 failed: BDB1507 Thread died in Berkeley DB library
    CentOs安装MySql
    周末遐想(计算最长英语单词链)
    单词词频统计(12组)
  • 原文地址:https://www.cnblogs.com/xyptechnology/p/8343466.html
Copyright © 2011-2022 走看看