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网络通信的更多相关文章

  1. 小尝试一下 cocos2d

    好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下.小结一下了解到的情况. 基本概念 首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 ...

  2. 采用cocos2d-x lua 制作数字滚动效果样例

    require "Cocos2d"require "Cocos2dConstants"local testscene = class("testsce ...

  3. Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板

    很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下. 在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例 ...

  4. iPhone开发与cocos2d 经验谈

    转CSDN jilongliang : 首先,对于一个完全没有mac开发经验,甚至从没摸过苹果系统的开发人员来说,首先就是要熟悉apple的那一套开发框架(含开发环境IDE.开发框架uikit,还有开 ...

  5. ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信

    本文内容摘要:1)安装zeromq.2)实例说明使用zmq进行网络间的消息发送和接收 首先在机器中安装zmq库 步骤如下: 1)下载zeromq的源代码,ZeroMQ的官方网址:http://zero ...

  6. cocos2d学习记录

    视频 - http://www.manew.com/forum-105-3.html一个论坛帖 - http://www.zhihu.com/question/21114802官网 - http:// ...

  7. Android下Cocos2d创建HelloWorld工程

    最近在搭建Cocos2d的环境,结果各种问题,两人弄了一天才能搞好一个环境-! -_-!! 避免大家也可能会遇到我这种情况,所以写一个随笔,让大家也了解下如何搭建吧- 1.环境安装准备 下载 tadp ...

  8. 学生信息管理系统(cocos2d引擎)——数据结构课程设计

    老师手把手教了两天半,看了一下模式,加了几个功能就大功告成了!!! 给我的感想就是全都是指针! 添加图片精灵: CCSprite*  spBG = CCSprite::create("&qu ...

  9. 基础笔记12(socket,url网络通信)

    进一步深入socket 1.网络通信条件: .IP地址,可用主机名. .传输数据时将不用的应用程序通过数字标识区分开来,这种标识称为逻辑端口,也称端口.(0-65535端口,一般系统预留0-1024) ...

  10. Windows Store App 网络通信 HttpWebRequest

    如果希望更好地控制HTTP请求,可以使用System.Net类库中的HttpWebRequest类,该类对HTTP协议进行了完整的封装,并且提供了很多对HTTP协议中的 Header.Content和 ...

随机推荐

  1. 你的项目真的需要Session吗?

    在web开发中,Session这个东西一直都很重要,至少伴随我10年之久, 前一段时间发生一个性能问题,因为Redis session 问题,后来想想 其实我的项目session 是不需要的. 先看看 ...

  2. Reservoir Sampling 蓄水池抽样算法,经典抽样

    随机读取数据,如何保证真随机是不可能的,因为计算机的随机函数是伪随机的. 但是在不考虑计算机随机函数的情况下,如何保证数据的随机采样呢? 1.系统提供的shuffle函数 C++/Java都提供有sh ...

  3. 小白学数据分析----->ARPDAU的价值

    最近盛大刚刚发布了财报,有人给我打电话问什么是ARPDAU?ARPDAU能够起到什么作用?本文就这个问题给大家解析一下ARPDAU.在讲ARPDAU之前,有两个概念大家应该很清楚,一个是ARPU,另一 ...

  4. SVO实时全局光照:中等规模场景的GI实现

    RTGI人生成就点unlocked! 快速集成DR+AO+SVO GI,针对中等场景粒度,初步具备全功能,暂未重度优化.附测试对比图.

  5. 【Android源代码下载】收集整理android界面UI效果源码

    在Android开发中,Android界面UI效果设计一直都是很多童鞋关注的问题,今天给大家分享下大神收集整理的多个android界面UI效果,都是源码,都是干货,贡献给各位网友! 话不多说,直接上效 ...

  6. 十大免费教程资源帮助新手快速学习JavaScript

    “JavaScript”的名头相信大家肯定是耳熟能详,但只有一小部分人群了解它的使用与应用程序构建方式.这“一小部分”人指的当然是技术过硬的有为青年.网络程序员以及IT专业人员.但对于一位新手或者说外 ...

  7. 怎么删除github上的仓库

    1.到你的个人中心.点击你的个人账号.下图的红色部分 2.点击repositories(仓库),选择你要删除的项目 3.code这一行导航栏 最后的一个. setting 4.下拉页面到最下面 Del ...

  8. Hadoop - Ambari集群管理剖析

    1.Overview Ambari是Apache推出的一个集中管理Hadoop的集群的一个平台,可以快速帮助搭建Hadoop及相关以来组件的平台,管理集群方便.这篇博客记录Ambari的相关问题和注意 ...

  9. webClient请求JAVA超时解决方案

    private class MyWebClient: WebClient { protected override WebRequest GetWebRequest(Uri uri) { WebReq ...

  10. [亿能测试_www.gdtesting.com]测试技术资料网盘共享

    [亿能测试_www.gdtesting.com]测试技术资料网盘共享: http://pan.baidu.com/share/home?uk=974090852