网络通信之http

由 卓别林 创建, 最后一次修改 2016-09-08

CrossApp为我们封装了http的网络框架,其文件在CrossApp引擎包的\extensions\network文件下的 HttpClient、HttpRequest 、HttpResponse。

进行一次http交互,需要涉及的有三个类:

HttpRequest 用来描述一个请求。

HttpResponse 用来描述对应请求的响应。

HttpClient是一个单例模式的类,它的职责就是负责将收到的HttpRequest对象push到发送队列中,并发送一个信号量驱动工作线程工作,工作线程再将收到的数据封装成一个HttpResponse对象push接收队列,并启用调度来派送数据。


引用头文件:

#include "CrossAppExt.h"

请求

/**
编译到Android平台之后注意添加联网权限
**/
//创建request对象,这里new出来的对象不能使用autorelease(),原因后述  
CAHttpRequest* request = new CAHttpRequest();
 
//设置URL
request->setUrl("www.9maio.com");
 
//设置请求类型kHttpGet、kHttpPost、KHttpPostFile、kHttpPut、kHttpDelete、kHttpUnkown
request->setRequestType(CAHttpRequest::kHttpGet);
 
//这是回调对象和回调函数  
request->setResponseCallback(this, httpresponse_selector(FirstViewController::requestresult));
 
//使用CCHttpClient共享实例来发送request
CAHttpClient::getInstance()->send(request);
 
//调用release() 
request->release();

接收

void FirstViewController::requestresult(CAHttpClient* clinet, CAHttpResponse* response)
{
    if (!response->isSucceed())
    {
        return;
    }
    //获取返回代码,比如200、404等
    int statusCode = response->getResponseCode();
    if (statusCode == 200)
    {
        std::string responseRes = "";
        std::vector<char> *buffer = response->getResponseData();
        for (unsigned int i = 0; i < buffer->size(); i++)
        {
            responseRes += (*buffer)[i];
        }
        //查找字符“官方特约”
        string::size_type idx = responseRes.find(UTF8("官方特约"));
        if (idx == -1)
        {
            //为找到字符
            CCLog(" Not Found");
            return;
        }
        string temp = responseRes.substr(idx, 30);
        string num = temp.substr(temp.find(UTF8(":")) + 3, temp.find("<") - temp.find(UTF8(":")) - 3);
        CCLog("temp:%s",temp.c_str());
    }
    else
    {
        //打印返回代码
        CCLog("statusCode:%d", statusCode);
    }
}

以上内容是否对您有帮助:

二维码
建议反馈
二维码