cocos2d-x 当中访问WebServer服务器的方法,以及解析XML文件.

cocos2d-x做游戏,避免不了和服务器网络的交互,这里分享一下cocos2d-x 和WebServer数据交互的例子。

请求的发送通过 类 CCHttpRequest 发送。 (cocos2d-x 版本为2.0~2.0.4)

    

    CCHttpRequest* request = new CCHttpRequest();

    request->setUrl("这里是你的WebServer地址");

    request->setRequestType(CCHttpRequest::kHttpPost);

    std::vector<std::string> headers;

    headers.push_back("Content-Type: application/soap+xml; charset=utf-8"); //WebServer当中数据文件头类型说明

    request->setHeaders(headers);

    request->setResponseCallback(this, callfuncND_selector(HelloWorld::onHttpRequestCompleted));  //设置请求完成后的回调函数 onHttpRequestCompleted 失败成功都会进入

    

    // write the post data

    const char* postData = "这里是XML格式的请求报文.";

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

    

    request->setTag("POST test2"); //给请求指针设置标记

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

    request->release();


    

    在请求数据完成后需要对返回的数据进行处理。类 CCSAXParser 就是处理解析返回的XML报文,在当前类头文件中继承 cocos2d::CCSAXDelegator 并且复写父类当中的解析回调函数进行数据获取:

    virtual void startElement(void *ctx, const char *name, const char **atts);

    virtual void endElement(void *ctx, const char *name);

    virtual void textHandler(void *ctx, const char *s, int len);



    

void HelloWorld::onHttpRequestCompleted(cocos2d::CCNode *sender, void *data)

{

    CCHttpResponse *response = (CCHttpResponse*)data;

    

    if (!response)

    {

        return;

    }

    

    // You can get original request type from: response->request->reqType

    if (0 != strlen(response->getHttpRequest()->getTag()))

    {

        CCLog("%s completed", response->getHttpRequest()->getTag());

    }

    

    int statusCode = response->getResponseCode();

    char statusString[64] = {};

    sprintf(statusString, "HTTP Status Code: %d, tag = %s", statusCode, response->getHttpRequest()->getTag()); 

    //m_labelStatusCode->setString(statusString);

    CCLog("response code: %d", statusCode);

    

    if (!response->isSucceed())//判断返回的状态码,是否存在连接错误.

    {

        CCLog("response failed");

        CCLog("error buffer: %s", response->getErrorBuffer());

        return;

    }

    

    // dump data

    std::vector<char> *buffer = response->getResponseData();

    std::string strResult = "";

    //printf("Http Test, dump data: ");

    for (unsigned int i = 0; i < buffer->size(); i++)  //获取返回的XML内容

    {

        printf("%c", (*buffer)[i]);

        strResult+=(*buffer)[i];

    }

    //printf("\n");

    CCLog("%s",strResult.c_str());

    

    //开始解析XML内容

    CCSAXParser par;

    if(!par.init("UTF-8"))

    {

        CCLog("-----请使用utf-8格式!");

        return ;

    }

    par.setDelegator(this);

    par.parse(strResult.c_str(), strResult.size());

}


完整DEMO工程下载地址:点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值