Cocos2d-x 网络访问之GET方法和POST

来源:互联网 发布:中世纪2优化9有英雄吗 编辑:程序博客网 时间:2024/05/16 01:22
一、回顾:之前用过java和oc的网络编程
    1.java需要在线程中执行网络操作这种耗时长的操作,在java中Thread的方法很简单方便,在Android开发时加上Handler就完美至极,可以实现网络访问和界面数据的更新实现异步,AsynTask是封装得比较好的线程访问方式,但是有其弱点就是线程需要排队,不好管理优先级;
    2,oc用得并不是很多,但是的方式和C++类似,都是用函数指针的方式,在网络访问的各个阶段回调出来处理,网络访问同样需要用到线程的异步处理方式,不然在iphone开发的时候也会引起崩溃或黑屏。
二、C++的实现过程
    1,用到的头文件               

#include "extension.h"

#include "HttpRequest.h"

#include "HttpClient.h"

#include "HttpResponse.h"

    2,名空间

using namespace cocos2d;

using namespace CocosDenshion;

using namespace extension;

    3,网络请求对象

    //创建一个网络请求,所有的参数设置在网络请求里边,如地址,回调函数,请求方式,参数等,最后需要用CCHttpClient提交网络请求。

    CCHttpRequest* request = new CCHttpRequest();

    //设置网络请求地址

     request->setUrl("");

    //设置网络请求方式

    request->setRequestType(CCHttpRequest::kHttpGet);

    /**

    * 请求的方式,枚举类型

    typedef enum

    {

        kHttpGet,//get方式

        kHttpPost,//post方式

        kHttpPut,//put方式,没有用过,不知道

        kHttpDelete,//delete方式,没用过

        kHttpUnkown,//未知方式,没用过

    } HttpRequestType;

    */

//    const char* postData = "visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";

    //提交的参数,post提交的参数

//    request->setRequestData(postData, strlen(postData));


​    //设置回调

    request->setResponseCallback();

    //设置请求tag

    request->setTag("GET test1");

    //提交请求

    CCHttpClient::getInstance()->send(request);

    //内存释放

    request->release();

//======================完整代码

//注:ios和android网络访问我们已经熟练的将其放在一个线程中处理,但是cocos2d-x 查看源码我们就知道,系统在send操作里边自动添加了Thread,我们需要在外层添加新的线程,执行添加回调函数就ok

//提交请求

 

  CCHttpRequest* request = new CCHttpRequest();    //url    request->setUrl("www.baidu.com");    request->setRequestType(CCHttpRequest::kHttpGet);    request->setResponseCallback(this, httpresponse_selector(HelloWorld::netWorkTest));    request->setTag("GET test1");    CCHttpClient::getInstance()->send(request);    request->release();

//回调处理

void HelloWorld::netWorkTest(CCObject* pSender,void *data){    CCHttpResponse* response = (CCHttpResponse*)data;    char statusString[64] = {};    int statusCode = response->getResponseCode();    CCLog("response code: %d", statusCode);    //处理请求状态码    sprintf(statusString, "HTTP Status Code: %d, tag = %s", statusCode, response->getHttpRequest()->getTag());    CCLog("statusString:%s",statusString);    //判断请求是否成功    if (!response->isSucceed())    {        CCLog("response failed");        CCLog("error buffer: %s", response->getErrorBuffer());        return;    }    std::vector<char> *buffer = response->getResponseData();    CCLOG("size:%lu",buffer->size());    printf("Http Test, dump data: ");    //转化为str类型    std::string str;    str.insert(str.begin(), buffer->begin(), buffer->end());    std::cout<<"str: "<<str;}

原创粉丝点击