Cocos2d-x3.0网络通信学习(一)
配置:win7+Cocos2d-x.3.0+VS2012
摘要:建立基本的http通信并得到返回信息。
一、添加项目与编译库
1、添加头文件
在需要用到Http网络相关类的文件中加入头文件
#include "network/HttpClient.h"
2、添加lib库
路径:%工作目录%\cocos2d\cocos\network\proj.win32
位置:项目-右键-属性-通用属性-添加新引用
操作:将路径中的libNetwork.vcxproj加入项目,并根据上述位置添加新引用。
3、添加附加依赖项
位置:项目-右键-属性-配置属性-链接器-输入-附加依赖项
操作:编辑 加入libcurl_imp.lib;libNetwork.lib;
二、Http通信流程
1、实例化请求
cocos2d::extension::CCHttpRequest* request = new cocos2d::extension::CCHttpRequest();
2、初始化请求
设置url
request->setUrl("http://www.oschina.net/action/api/news_list");
设置请求类型
request->setRequestType(cocos2d::extension::CCHttpRequest::kHttpPost);
设置header
std::vector<std::string> headers;
headers.push_back("Content-Type: application/json; charset=utf-8");
request->setHeaders(headers);
设置请求的数据
const char* postData = "catalog=2&pageIndex=1&pageSize=5";
request->setRequestData(postData ,strlen(postData));
设置响应回调函数
request->setResponseCallback(this, callfuncND_selector(HelloWorld::onHttpRequestCompleted));
设置tag
request->setTag("Post_My_Data");
发送请求
cocos2d::extension::CCHttpClient::getInstance()->send(request);//添加请求到HttpClient任务队列
释放请求
request->release();//告诉HttpClient,我们已经完成了连接,并且它现在可以重用。如果不这样做的话,HttpClient将无限期地等待一个连接释放,以便它可以重用。
3、处理响应
onHttpRequestCompleted(cocos2d::CCNode *sender ,void *data)
重定向输入输出流 //可缺
AllocConsole();//为调用进程分配一个新的控制台。
freopen("CONIN$", "r", stdin);//控制台输入
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
安全控制
cocos2d::extension::CCHttpResponse *response = (cocos2d::extension::CCHttpResponse*)data;
if (!response)
{
return;
}
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());
CCLog("response code:%d" ,statusCode);
if (!response->isSucceed())
{
CCLog("response failed");
CCLog("error buffer:%s" ,response->getErrorBuffer());
}
获得响应数据
std::vector<char> *buffer = response->getResponseData();
三、GET请求示例
向指定资源发出“显示”请求。仅用于读取数据。
HttpRequest* request = new HttpRequest();
request->setUrl("http://www.baidu.com");
request->setRequestType(HttpRequest::Type::GET);
request->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpRequestCompleted,this));
request->setTag("GET test");
cocos2d::network::HttpClient::getInstance()->send(request);
request->release();
四、POST请求示例
向指定资源提交数据,请求服务器进行处理。数据包含在请求文本中。
HttpRequest* request = new HttpRequest();
request->setUrl("httpbin.org/post");
request->setRequestType(HttpRequest::Type::POST);
request->setResponseCallback(CC_CALLBACK_2(HelloWorld::onHttpRequestCompleted,this));
// write the post data
const char* postData = "visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
request->setRequestData(postData, strlen(postData));
request->setTag("POST test");
cocos2d::network::HttpClient::getInstance()->send(request);
request->release();
五、参考链接
1、Cocos2d-x之Http网络编程(一)——网络请求的发送和接收
2、如何使用HttpClient
原文链接:http://www.cnblogs.com/tangyikejun/p/3950581.html
Cocos2d-x3.0网络通信学习(一)的更多相关文章
- 如何在Cocos2D 1.0 中掩饰一个精灵(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 原帖来自Ray Wunderlich写的精彩的文章 How To ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- 20145208 《Java程序设计》第0周学习总结
20145208 <Java程序设计>第0周学习总结 阅读心得 读了老师推荐的几个文章,虽然第四个文章"为什么一定要自学"报告资源不存在而无法阅读,其他的三篇文章都言之 ...
- Json.Net6.0入门学习试水篇
原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...
- Bootstrap3.0入门学习系列
Bootstrap3.0入门学习系列规划[持续更新] 前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...
- 如何在Cocos2D 1.0 中掩饰一个精灵(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰一个精灵:实现代码 打开HelloWorldLayer.m并 ...
- Cocos2D v2.0至v3.x简洁转换指南(三)
Cocos2D 3.3中的注意事项 如果你在使用Cocos2D 3.3+(是SpriteBuilder 1.3+的一部分)你将不得不替分别的换所有存在的UITouch和UITouchEvent为CCT ...
- Cocos2D v2.0至v3.x简洁转换指南(二)
触摸处理 我们在稍后将完成Cocos2d 3.0中触摸处理的完整教程.而现在最重要的是知道如何去启用触摸处理在你的CCNode中: self.userInteractionEnabled = TRUE ...
- 如何将各种低版本的discuz版本升级到discuz x3.0
最近在做discuz改版的项目,遇到了很多问题,相信很多拥有discuz论坛的版主,站长和程序猿在升级或改版discuz的过程中遇到过和我一样的问题,所以我开了一个discuz专栏,为大家讲解一下di ...
随机推荐
- Linux基础 - Crontab定时任务
目录 设置Cron任务 创建任务 设置运行周期 配置命令 常见问题 如何列出所有的Cron任务 如何查看Cron任务运行log 如何配置带有虚拟venv的Python脚本 如何在Cron 任务中发送邮 ...
- Bean 字段复制利器 MapStruct
本文聊一个工具类,MapStruct ,它是一个在 dto,po(do/entity),vo 等这些 pojo 中转换字段的一个工具,在应用中经常有这样的转换,在 spring 和 apache-co ...
- 《JavaScript 模式》知识点小抄本(上)
介绍 最近开始给自己每周订个学习任务,学习结果反馈为一篇文章的输出,做好学习记录. 这一周(02.25-03.03)我定的目标是<JavaScript 模式>的第七章学习一遍,学习结果的反 ...
- pythpn爬虫--来一波美女,备好纸巾了!
关于图片名称的中央乱码问题 import requests from lxml import etree url = 'http://pic.netbian.com/4kmeinv/index_%d. ...
- webpack学习2.2webpack简介,初步了解
webpack V1功能进化 编译打包 HMR(模块热更新) 代码分割 文件处理(loader) webpack V2功能进化 tree shaking(并欸有在项目中使用的代码不会打包到里面,打包之 ...
- Vue基础简介
目录 vue基础 一.导入vue 二.vue挂载点 三.vue变量 四.vue事件 五.vue文本指令 六.vue事件指令 七.vue属性指令 vue基础 一.导入vue 补充:vue的语句以及导入j ...
- 【BZOJ 3771】Triple
Problem Description 给出 \(n\) 个物品,第 \(i\) 个物品体积为 \(a_i\) . 对于每个体积 \(V\) ,求选出 \(3\) 个物品,体积之和为 \(V\) 的方 ...
- Python爬虫实战:批量下载网站图片
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: GitPython PS:如有需要Python学习资料的小伙伴可以 ...
- 动态代理模式——JDK动态代理
今天,我就来讲一下动态代理的设计模式. 动态代理的意义在于生成一个代理对象,来代理真实对象,从而控制真实对象的访问.操作动态代理需要两个步骤:一.代理对象和真实对象建立代理关系.二.实现代理对象的代理 ...
- 如何快速将百度大脑AI技术内置智能小程序中
实现效果: 该AI智能小程序目前集成了百度AI开放平台数十个AI服务产品功能,包括人脸识别.文字识别.表格识别.红酒识别.货币识别.地标识别.手势识别.商标识别.果蔬识别.菜品识别等图片识别功能,以及 ...