配置: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网络通信学习(一)的更多相关文章

  1. 如何在Cocos2D 1.0 中掩饰一个精灵(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 原帖来自Ray Wunderlich写的精彩的文章 How To ...

  2. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  3. 20145208 《Java程序设计》第0周学习总结

    20145208 <Java程序设计>第0周学习总结 阅读心得 读了老师推荐的几个文章,虽然第四个文章"为什么一定要自学"报告资源不存在而无法阅读,其他的三篇文章都言之 ...

  4. Json.Net6.0入门学习试水篇

    原文:Json.Net6.0入门学习试水篇 前言 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中 ...

  5. Bootstrap3.0入门学习系列

    Bootstrap3.0入门学习系列规划[持续更新]   前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...

  6. 如何在Cocos2D 1.0 中掩饰一个精灵(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰一个精灵:实现代码 打开HelloWorldLayer.m并 ...

  7. Cocos2D v2.0至v3.x简洁转换指南(三)

    Cocos2D 3.3中的注意事项 如果你在使用Cocos2D 3.3+(是SpriteBuilder 1.3+的一部分)你将不得不替分别的换所有存在的UITouch和UITouchEvent为CCT ...

  8. Cocos2D v2.0至v3.x简洁转换指南(二)

    触摸处理 我们在稍后将完成Cocos2d 3.0中触摸处理的完整教程.而现在最重要的是知道如何去启用触摸处理在你的CCNode中: self.userInteractionEnabled = TRUE ...

  9. 如何将各种低版本的discuz版本升级到discuz x3.0

    最近在做discuz改版的项目,遇到了很多问题,相信很多拥有discuz论坛的版主,站长和程序猿在升级或改版discuz的过程中遇到过和我一样的问题,所以我开了一个discuz专栏,为大家讲解一下di ...

随机推荐

  1. CF 1131A,1131B,1131C,1131D,1131F(Round541 A,B,C,D,F)题解

    A. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  2. IPV6技术笔记(剖析IPv4toIPv6)

    IPV6技术笔记 IPv6地址入门概念 什么是IPv6? IPv6,全称Internet Protocol version 6,即网际协议版本6,也叫互联网通信协议第六版.是互联网工程任务组(IETF ...

  3. python爬虫--多任务异步协程, 快点,在快点......

    多任务异步协程asyncio 特殊函数: - 就是async关键字修饰的一个函数的定义 - 特殊之处: - 特殊函数被调用后会返回一个协程对象 - 特殊函数调用后内部的程序语句没有被立即执行 - 协程 ...

  4. 《Java知识应用》Java加密方式(MD5)详解

    1. 应用 使用MD5加密 因为:因为MD5的不可逆性,也可以保证你的key 是安全的,黑客无法通过原文和密文知晓你的key. 案例: import java.math.BigInteger; imp ...

  5. NPOI 工作簿一般设置

    HSSFWorkbook workbook = new HSSFWorkbook(); //声明一个空白的工作簿,也可以将已有文件转化为文件流作为参数声明一个工作簿,这样这个工作簿里就会有已有文件中的 ...

  6. nfs 所有的版本的 RFC 整理; nfs 所有版本对比;

    下面是针对 nfs 所有的版本,我们可以通过不同的RFC 进行详细看其RFC的细节来进行对比: 下面是备忘一些NFS RFC 的链接: https://datatracker.ietf.org/doc ...

  7. flask项目部署到生产环境的方案

    背景 使用Python+flask编写的一个小项目,在本地开发完毕后,需要部署到测试服务器上,这时候犯难了,因为之前没部署过这块东西,所以各种百度,总算是部署成功了,也对这个项目进行了jenkins持 ...

  8. 什么是spring框架?spring特点与好处,使用spring框架的好处是什么?

    转载:https://blog.csdn.net/hht006158/article/details/80181207. Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Ja ...

  9. 浅谈c#和lua的gc

    前提: 本文参考和借鉴相关博客,相关版权归其所有,我只是做一个归纳整理,所以本文没有任何版权 参考文献和书籍: CLR和.Net对象生存周期:   https://www.cnblogs.com/Wd ...

  10. webpack-dev-server工具

    webpack-dev-server来实现自动打包编译功能 // 1.npm install webpack-dev-server -D//2.和webpakc命令用法一样// 3.是本地安装的,无法 ...