cocos2d 网络

CURL用c开发的

curl库是一款免费开源的支持多种协议以及多个平台的通信开发包,它非常适合在cocos2dx中使用,HttpClient的底层就是使用的curl。
cu rl工作的一般流程:
(1)curl_easy_init   //获得curl工具
(2) curl_easy_setopt /设置一些选项
(3) curl_easy_perform //真正开始请求

(4) curl_easy_cleanup //清理


#include "curl/curl.h"


struct MemoryStruct

{

    char  * memory;//内容

    size_t  size; //长度

};

//接收到数据之后会调用该函数。

//参数含义: 1、接收到的内容。第2个参数 3个参数 相乘会得到接收到的内容有多少字节。


//void *万能指针

static size_t WritrMemoryCallback(void *contents,size_t size,size_t nmemb,void *userp)

{

    size_t realsize = size * nmemb;

    struct MemoryStruct*mem=(struct MemoryStruct*)userp;//相同

    //内容     堆上申请空间                                    空间的大小

    mem->memory=(char*)realloc(mem->memory, mem->size + realsize + 1);

    if (mem->memory == NULL)

    {

        printf("not enough memory (realloc returned NULL)\n");

        return 0;

    }

   //             (数组)           从源         拷贝的个数

    memcpy(&(mem->memory[mem->size]),contents, realsize);

    mem->size += realsize;

    mem->memory[mem->size] = 0;

    return realsize;

    

}




//注册

  /*  struct MemoryStruct chunk;

    chunk.memory=(char*)malloc(1);

    chunk.size=0;

    //url是利用URL语法在命令行方式下工作的开源文件传输工具

    CURL*curl=curl_easy_init();

    if (curl)

    {

 第 1 个参数 curl 是由 curl_easy_init() 返回的句柄  

第 2 个参数是可以设置的选项(CURLoption);

第 3 个参数是与第 2 个选项相关联的参数


        curl_easy_setopt(curl,CURLOPT_URL,"http://123.56.50.222:8050/[email protected]&password=123456&phoneIdentity=896498109");


 CURLOPT_WRITEDATA

使用该选项时,第 3 个参数作为用户数据的指针而传递到使用  CURLOPT_WRITEFUNCTION 选项时指定的回调函数中(第 4 个参数)。


        curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&chunk);

CURLOPT_WRITEFUNCTION

在启动会话时,一旦检测到有需要接收的数据时,回调函数被调用。

        curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,WritrMemoryCallback);

        

        CURLcode res = curl_easy_perform(curl);//请求成功返回0

        curl_easy_cleanup(curl);

        if (!res)

        {  //成功打印

            log("%s\n",chunk.memory);

            

        }else

        {

            log("error!\n");

            log("%d",res);

        }

    }

    

 

    

    //解析

    Document doc;//解析工具

    

    doc.Parse(chunk.memory);

    if (doc.HasParseError())

    {

        log("json  error\n");

//            return;

    }

    rapidjson::Value&_gameCharpter=doc["rstcode"];

    if (strcmp("401", _gameCharpter.GetString())==0)

    {

      MemoryStruct()

        cout<<"rstcode"<


    }

 

    

 //登录

    struct MemoryStruct chunk;

    chunk.memory=(char*)malloc(1);

   chunk.size=0;

    //url是利用URL语法在命令行方式下工作的开源文件传输工具

    CURL*curl=curl_easy_init();//创建curl

    

    if (curl)

    {


        curl_easy_setopt(curl,CURLOPT_URL,"http://123.56.50.222:8050/userLogin");

    const char * postData = "{email:[email protected],password:123456,phoneIdentity:896498109}";

    *CURLOPT_POSTFIELDS: 传递一个作为HTTP “POST”操作的所有数据的字符串。

    curl_easy_setopt(curl,CURLOPT_POSTFIELDS,postData);

    curl_easy_setopt(curl,CURLOPT_WRITEDATA,(void*)&chunk);

    curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,WritrMemoryCallback);


        CURLcode res = curl_easy_perform(curl);//请求访问

        curl_easy_cleanup(curl);

        if (!res)

        {

            log("%s\n",chunk.memory);

        }else

        {

            log("error!\n");

            log("%d",res);

        }

    }


    Document doc;//解析工具

    

    doc.Parse(chunk.memory);

    if (doc.HasParseError())

    {

        log("json  error\n");

        //      return;

    }

    //如果存在

    

    rapidjson::Value&_gameCharpter=doc["rstcode"];

    if (strcmp("202",_gameCharpter.GetString())==0)

    {

        

        cout<<"正确"<

    }

    





界面登录拷贝

curl_easy_setopt(curl,CURLOPT_URL,"http://123.56.50.222:8050/userLogin");

                     char str[300];

                     sprintf(str, "{email:%s,password:%s,phoneIdentity:%s}",TextField1->getString().c_str(),TextField2->getString().c_str(),TextField3->getString().c_str());


                 const char * postData = str;

                 

                 curl_easy_setopt(curl,CURLOPT_POSTFIELDS,postData);



你可能感兴趣的:(网络)