Cocos2d-x网络通信
Cocos2d-x示例提供了三种内置的网咯通信类
HttpClient,WebSocket,SocketIO。
其中第一个是简单的HTTP协议的使用,提供很多Http请求方式。
剩下的Socket*是针对类Socket连接的方式,不提供应用协议封装,所以测试的时候大部分都是Error出现,但是应该比较适合C/S模式的网络手游开发。
HttpClient使用方式简单:
WebSocket和SocketIO都要实现相应的委托基类中的纯虚函数(类似Java的抽象类的子类实现)
测试过程中WebSocket总是卡住UI,所以可能有问题。
头文件:
#ifndef __NETWORK_SCENE_H__ #define __NETWORK_SCENE_H__ #include "cocos2d.h" #include "network/HttpClient.h" #include "network/HttpRequest.h" #include "network/HttpResponse.h" #include "network/SocketIO.h" #include "network/WebSocket.h" class NetworkScene : public cocos2d::Layer ,public cocos2d::network::SocketIO::SIODelegate , public cocos2d::network::WebSocket::Delegate { public: static cocos2d::Scene* createScene(); virtual bool init(); void onHttpRequestCompleted(cocos2d::network::HttpClient *sender, cocos2d::network::HttpResponse *response); CREATE_FUNC(NetworkScene); //SocketIO virtual void onConnect(cocos2d::network::SIOClient* client); virtual void onMessage(cocos2d::network::SIOClient* client, const std::string& data); virtual void onClose(cocos2d::network::SIOClient* client); virtual void onError(cocos2d::network::SIOClient* client, const std::string& data); void testevent(cocos2d::network::SIOClient *client, const std::string& data); //WebSocket,可能处理有误 virtual void onOpen(cocos2d::network::WebSocket* ws); virtual void onMessage(cocos2d::network::WebSocket* ws, const cocos2d::network::WebSocket::Data& data); virtual void onClose(cocos2d::network::WebSocket* ws); virtual void onError(cocos2d::network::WebSocket* ws, const cocos2d::network::WebSocket::ErrorCode& error); private: cocos2d::network::SIOClient *client; }; #endif //__NETWORK_SCENE_H__
实现cpp
#include "NetworkScene.h" #include <vector> #include <string> #pragma warning(disable : 4996) USING_NS_CC; Scene* NetworkScene::createScene(){ auto scene = Scene::create(); auto layer = NetworkScene::create(); scene->addChild(layer); return scene; } bool NetworkScene::init(){ if (!Layer::init()){ return false; } auto request = new (std::nothrow)network::HttpRequest(); request->setUrl("http://www.httpbin.org/get"); request->setRequestType(network::HttpRequest::Type::GET); request->setResponseCallback(CC_CALLBACK_2(NetworkScene::onHttpRequestCompleted,this)); request->setTag("GET TEST1"); network::HttpClient::getInstance()->send(request); request->release(); request = new (std::nothrow)network::HttpRequest(); request->setUrl("http://www.httpbin.org/post"); request->setRequestType(network::HttpRequest::Type::POST); std::vector<std::string> headers; headers.push_back("Content-Type: application/json;charset=utf-8"); request->setHeaders(headers); const char *posData = "vistor=cocos2d-x&TestSuite=Extensions Test/NetworkTest"; request->setRequestData(posData, strlen(posData)); request->setTag("POST TEST1"); request->setResponseCallback(CC_CALLBACK_2(NetworkScene::onHttpRequestCompleted,this)); network::HttpClient::getInstance()->send(request); request->release(); client = network::SocketIO::connect(*this,"ws://channon.us:300"); client->setTag("SOCKET TEST"); client->on("testEvent", CC_CALLBACK_2(NetworkScene::testevent, this)); //应该收不到消息,因此我关闭的太早了 client->send("SIOCLIENT"); client->disconnect(); // auto webSocket = new network::WebSocket(); // webSocket->init(*this, "ws://echo.websocket.org"); // if (webSocket->getReadyState() == network::WebSocket::State::OPEN){ // log("Waiting"); // webSocket->send("I SEND This Message"); // } // // webSocket->close(); return true; } void NetworkScene::onHttpRequestCompleted(cocos2d::network::HttpClient *sender, cocos2d::network::HttpResponse *response){ log("OK"); != strlen(response->getHttpRequest()->getTag())){ log("%s completed ", response->getHttpRequest()->getTag()); int responseCode = response->getResponseCode(); log("%d", responseCode); if (response->isSucceed()){ log("Successed"); } std::vector<char> *buffer = response->getResponseData(); std::string buf(buffer->begin(), buffer->end()); log("%s", buf.c_str()); } } void NetworkScene::testevent(cocos2d::network::SIOClient *client, const std::string& data){ log("OK %s ",data.c_str()); } void NetworkScene::onConnect(network::SIOClient* client) { log("SocketIOTest::onConnect called"); } void NetworkScene::onMessage(network::SIOClient* client, const std::string& data) { log("SocketIOTest::onMessage received: %s", data.c_str()); } void NetworkScene::onClose(network::SIOClient* client) { log("SocketIOTest::onClose called"); } void NetworkScene::onError(network::SIOClient* client, const std::string& data) { log("SocketIOTest::onError received: %s", data.c_str()); } void NetworkScene::onOpen(cocos2d::network::WebSocket* ws){ log("open %p", ws); } void NetworkScene::onMessage(cocos2d::network::WebSocket* ws, const cocos2d::network::WebSocket::Data& data){ log("message %p", ws); } void NetworkScene::onClose(cocos2d::network::WebSocket* ws){ log("close %p", ws); } void NetworkScene::onError(cocos2d::network::WebSocket* ws, const cocos2d::network::WebSocket::ErrorCode& error){ log("error %p", ws); }
测试结果就无法贴出来,特别是后面的两个Socket。
以上内容仅供参考,代码很有可能有重大BUG。
以上。
Cocos2d-x网络通信的更多相关文章
- 小尝试一下 cocos2d
好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下.小结一下了解到的情况. 基本概念 首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 ...
- 采用cocos2d-x lua 制作数字滚动效果样例
require "Cocos2d"require "Cocos2dConstants"local testscene = class("testsce ...
- Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板
很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下. 在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例 ...
- iPhone开发与cocos2d 经验谈
转CSDN jilongliang : 首先,对于一个完全没有mac开发经验,甚至从没摸过苹果系统的开发人员来说,首先就是要熟悉apple的那一套开发框架(含开发环境IDE.开发框架uikit,还有开 ...
- ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信
本文内容摘要:1)安装zeromq.2)实例说明使用zmq进行网络间的消息发送和接收 首先在机器中安装zmq库 步骤如下: 1)下载zeromq的源代码,ZeroMQ的官方网址:http://zero ...
- cocos2d学习记录
视频 - http://www.manew.com/forum-105-3.html一个论坛帖 - http://www.zhihu.com/question/21114802官网 - http:// ...
- Android下Cocos2d创建HelloWorld工程
最近在搭建Cocos2d的环境,结果各种问题,两人弄了一天才能搞好一个环境-! -_-!! 避免大家也可能会遇到我这种情况,所以写一个随笔,让大家也了解下如何搭建吧- 1.环境安装准备 下载 tadp ...
- 学生信息管理系统(cocos2d引擎)——数据结构课程设计
老师手把手教了两天半,看了一下模式,加了几个功能就大功告成了!!! 给我的感想就是全都是指针! 添加图片精灵: CCSprite* spBG = CCSprite::create("&qu ...
- 基础笔记12(socket,url网络通信)
进一步深入socket 1.网络通信条件: .IP地址,可用主机名. .传输数据时将不用的应用程序通过数字标识区分开来,这种标识称为逻辑端口,也称端口.(0-65535端口,一般系统预留0-1024) ...
- Windows Store App 网络通信 HttpWebRequest
如果希望更好地控制HTTP请求,可以使用System.Net类库中的HttpWebRequest类,该类对HTTP协议进行了完整的封装,并且提供了很多对HTTP协议中的 Header.Content和 ...
随机推荐
- java产生随机数的几种方式
java产生随机数的几种方式 一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他 ...
- iOS 多渠道打包 编译脚本
http://webfrogs.me/2012/09/19/buildipa/http://blog.csdn.net/baxiaxx/article/details/8267295http://ic ...
- 持续集成工具Hudson安装实例
安装maven 下载maven,解压 [root@localhost local]# pwd /usr/local [root@localhost local]# -bin.tar.gz [root@ ...
- 转:如何学习javascript
ps:每过一段时间就会发觉自己懂的越来越少,打开编辑器的时候不知道从何入手.兴许是过于急于求成,总没有系统地去对这门语言进行学习,囫囵吞枣,只想着能够解决工作需求.是时候让自己重新出发,从零开始,一页 ...
- SQL Server 2012 各版本功能比较
有关不同版本的 SQL Server 2012 所支持的功能的详细信息. 功能名称 Enterprise 商业智能 Standard Web Express with Advanced Service ...
- Three levels at which any machine carrying out an Information-Processing task must be understood
1. Computational theory What is the goal of computation, why is it appropriate, and what is the logi ...
- 使用WebApi时Post和Put的区别
简单的说Post是添加,Put是修改 吃不准的话,尝试用相同参数访问二次接口,结果不同的是Post(会产生多条记录),结果相同的是Put(仅为一条记录),例如:写博客就是Post:更新签名就是Put
- 即将放出ITSEC第一期所有培训视频
课程大概被分为三个章节 客户端安全培训 安全工具培训 服务端安全培训 部分PPT 详细课程表 FireBug代码调试工具使用:工具介绍 FireBu ...
- Volley 实现原理解析(转)
Volley 实现原理解析 转自:http://blog.csdn.net/fengqiaoyebo2008/article/details/42963915 1. 功能介绍 1.1. Volley ...
- lua学习项目笔记
这几天草草的浏览了一下电子版的<lua程序设计>,没有懂的地方就自动忽略了,挑拣了一些可以理解的部分一直在推进.推进至后面的时候已经浑浑噩噩的了,有种想看完这本书的强迫症的感觉.推进CAP ...