本文原创版权归 csdn 这山那山 所有,转载请标明原文作者及出处,以示尊重!!

作者:这山那山

博客:http://blog.csdn.net/wangbin_jxust/article/details/9632771

专栏:http://blog.csdn.net/column/details/gamecoder.html

联网游戏开发中,经常遇到http编程,接下来就分三次对cocos2dx的网络编程进阶

本博文中先介绍建立基本的http通信并得到返回信息

1.创建cocos2dx工程。

2.项目引用外部库。

如果要使用cocos2dx的CCHttpClient来进行网络访问,则需要引入cocos2dx的相关库,详细步骤如下:

右键单击项目->属性->c/c++->常规,在右边的附件包含目录中添加cocos2dx的extensions目录对应的路径。

然后,右键单击项目->属性->链接器->输入,在右边的附件依赖项中添加libcurl_imp.lib和libExtensions.lib两个库,用分号隔开。

如果不引入extensions文件夹,会出现找不到CCHttpClient的错误;

如果不引入libcurl_imp.lib和libExtensions.lib两个库,编译项目时也会出现报错。

另外注意引入头文件:

#include "cocos-ext.h"

3.添加下载按钮和回调函数。

添加下载按钮:
CCMenuItemImage *pDownloadItem = CCMenuItemImage::create(
"bt_blue_light.png",
"bt_blue_light.png",
this,
menu_selector(HelloWorld::menuDownloadCallback)
);
CC_BREAK_IF(!pDownloadItem);
CCSize pWinSize = CCDirector::sharedDirector()->getWinSize();
CCMenu* pDownloadMenu = CCMenu::create(pDownloadItem, NULL);
pDownloadMenu->setPosition(ccp(50  ,50));
CC_BREAK_IF(! pDownloadMenu);
this->addChild(pDownloadMenu, 1);

添加按钮的回调函数:

void HelloWorld::menuDownloadCallback(CCObject* pSender)
{
cocos2d::extension::CCHttpRequest* request = new cocos2d::extension::CCHttpRequest();
request->setUrl("http://www.oschina.net/action/api/news_list");
request->setRequestType(cocos2d::extension::CCHttpRequest::kHttpPost);
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));
request->setTag("Post_My_Data");
cocos2d::extension::CCHttpClient::getInstance()->send(request);
request->release();
}
按钮的回调函数里向服务器发起http请求了,request->setResponseCallback(this, callfuncND_selector(HelloWorld::onHttpRequestCompleted))一行代码,向请求结束时添加了onHttpRequestCompleted回调函数

4.为http request 结束增加回调函数并读取网络数据

void HelloWorld::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();
printf("Http response,dump data:");
std::string result = "";
for (unsigned int i = 0; i < buffer->size(); i ++)
{
printf("%c" ,(*buffer)[i]);
}
}

debug时就能看到reponse中服务器返回的数据了。

打印到窗体中:

如果还不知道如何打印到窗口,请参考:cocos2dx输出Log的几种方法

至此,我们第一步已经完成。

cocos2dx之Http网络编程(一)——网络请求的发送和接收相关推荐

  1. python socket清空接收缓冲区_Python网络编程——修改套接字发送和接收的缓冲区大小...

    很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...

  2. Python网络编程:使用requests.post发送POST请求

    Python网络编程:使用requests.post发送POST请求 在Python中,requests是一个强大的库,它可以用于发送HTTP请求并且处理响应.requests.post()函数是这个 ...

  3. 迈入JavaWeb第一步,Java网络编程基础,TCP网络编程URL网络编程等

    文章目录 网络编程概述 网络通信要素 要素一IP和端口号 要素二网络协议 TCP网络编程 UDP网络编程 URL网络编程 Java网络编程基础 网络编程概述 Java是Internet上的语言,它从语 ...

  4. 如何连接Linux上的服务器 网络编程,Linux 网络编程 一

    一.网络编程基础 网络编程本身是一门很大的学问,涉及到的东西也很多,尤其是各种协议.先看图: 正如上图所示,网络编程中包含五大层面(也有区分六个层面),从应用层到物理层可以明显看出 越往下越接近计算机 ...

  5. python 网络编程是什么_什么是网络编程-Python 网络编程-嗨客网

    Python网络编程网络编程教程 网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机.数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一 ...

  6. android网络编程及网络超时处理

    android网络编程及网络超时处理 本文是收录的两篇关于这方面的文章 Android超时机制的处理 由于手机端应用的响应,与当时的无线通信网络状况有很大的关联.而通信网络往往具有不稳定,延迟长的特点 ...

  7. 网络编程:网络协议简介

    这是张富涛的第10篇原创 网络编程:网络协议简介 网络协议在网络编程中是一个比较神秘的概念,今天就由我们揭开它神秘的面纱吧. 1. 什么是网络协议? 网络协议是指对于网络中传输的数据格式的规定.在计算 ...

  8. 13、python网络编程之网络通信协议

    python网络编程之网络通信协议 一.C/S与B/S架构 B/S架构 B/S架构中省去了客户端的开发,是基于浏览器(Browser)与服务端完成数据的通信 二.网络通信 什么是网络 网络是用物理链路 ...

  9. 【技术分享篇】从网卡到tcpip协议栈,再到应用程序丨tcp/ip网络编程丨网络api的实现原理丨sk_buff的作用

     从网卡 聊到tcp/ip协议栈,再到应用程序 1. posix tcp/ip网络编程 2. 网络api的实现原理 3. sk_buff的作用 [技术分享篇]面试中从网卡 聊到tcpip协议栈,再到应 ...

  10. 【网络编程】网络基础知识

    前言 小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ ...

最新文章

  1. Google 确认 Chrome 存在严重漏洞,向 20 亿用户发出警告:你们需立即更新浏览器...
  2. 谷歌程序员犯低级错误?少打一个字符引发重大 Bug,致大量 Chromebook 无法解锁...
  3. 冒泡排序和鸡尾酒排序(改进的冒泡排序)
  4. word如何一键全选_这些超实用的word技巧,个个让你事半功倍
  5. wxWidgets:wxArtProvider类用法
  6. c语言函数调用二次方程求根,[编程入门]自定义函数求一元二次方程 (C语言代码)...
  7. javascript好文---深入理解定位父级offsetParent及偏移大小
  8. zenmap扫描出来linux,如何在Linux上使用NMAP安全扫描器
  9. 暑期训练日志----2018.8.20
  10. 服务器端添加网站,服务器添加网站
  11. nginx代理https后,spring mvc web应用redirect https变成http
  12. POI实现超大数据的Excel的读写操作
  13. 高等代数第3版下 [丘维声 著] 2015年版_黄哥友情提示:学习线性代数的书和视频...
  14. 玄学编程入坑指南之侠客行:黑匣子·谜
  15. matlab 定义离散函数,matlab离散点拟合函数
  16. J2EE的体系架构——J2EE
  17. 微信内置浏览器 用 JS 调用微信APP分享到微信朋友圈
  18. snapchat中国使用_如何使用Snapchat:发送快照和消息的基础
  19. 账号二次登陆,强制当前账号下线
  20. js后代选择器_后代选择器和子元素选择器的区别

热门文章

  1. 二叉树的创建、遍历(递归和非递归实现)、交换左右子数、求高度(c++实现)
  2. 9-11NOIP模拟赛总结
  3. 低价营销网站建设是陷阱,中小企业要谨记!
  4. Ubuntu下安装并配置VS Code编译C++
  5. 《高可用架构·中国初创故事(第3期)》一2.5 指导
  6. 魅族“携手”京东,背后有何意图?
  7. 【转】虚拟机下安装小红帽Linux9.0图解
  8. 浅谈矩阵分解在推荐系统中的应用
  9. 安卓nfs网络文件服务器,Linux网络文件服务器 NFS
  10. 后续:为LAMP添加XCache加速