当前位置:K88软件开发文章中心编程语言APP编程CrossApp → 文章内容

网络通信之http

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-23 13:52:48

由 ?﹏???ζ???﹏﹏? 创建, 最后一次修改 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(); //设置URLrequest->setUrl("www.9maio.com"); //设置请求类型kHttpGet、kHttpPost、KHttpPostFile、kHttpPut、kHttpDelete、kHttpUnkownrequest->setRequestType(CAHttpRequest::kHttpGet); //这是回调对象和回调函数 request->setResponseCallback(this, httpresponse_selector(FirstViewController::requestresult)); //使用CCHttpClient共享实例来发送requestCAHttpClient::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); }}

网络通信之http