转自:https://www.cnblogs.com/lmx282110xxx/p/10798716.html

WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信。实现浏览器与服务器的即时通讯。即服务器也能主动向客户端发消息。

WebSocket代理类和方法:

cocos2d同样对websocket进行了封装。WebSocket和WebSocket::Delegate
1:WebSocket:
   WebSocket类提供了跟websocket相关操作的方法。它的作用包括:
   1、创建socket对象
   2、向服务器发送数据,可以是文本数据,也可以是二进制数据
   3、判断链接状态  
       enum class ErrorCode
       {
               TIME_OUT,
               CONNECTION_FAILURE,
               UNKNOWN,
       };
   等等。
 
2:WebSocket::Delegate:
   类似Socket。WebSocket::Delegate提供了4个纯虚函数,在使用websocket时,需要先继承Delegate类和实现这4个虚函数。

创建WebSocket对象并发送文本数据:

创建对象:

 cocos2d::network::WebSocket* wsSendText = new network::WebSocket()

初始化请求地址:

 wsSendText ->init(*this, "ws://echo.websocket.org")。

发送数据:

wsSendText ->send("Hello WebSocket, I'm a text message.");

接收数据:

当服务器向客户端发送数据,客户端会调用onMessage方法接收返回的数据。
数据使用WebSocket::Data封装。它是cocos2d定义的一个结构体。结果如下:

struct Data
{Data():bytes(nullptr), len(0), issued(0), isBinary(false){}char* bytes;ssize_t len, issued;bool isBinary;
};

它包含四个字段:bytes存放数据,len存放数据的长度,isBinary用来标识bytes中存放的数据是文本数据还是二进制数据。
使用Data结构体得到数据后,就可以使用这些数据了。

代码实操:

头文件:

#ifndef __TestWebSocketScene_SCENE_H__
#define __TestWebSocketScene_SCENE_H__#include "cocos2d.h"
#include "network\WebSocket.h"
USING_NS_CC;using namespace cocos2d::network;
class TestWebSocket : public cocos2d::Layer,WebSocket::Delegate
{public:static cocos2d::Scene* createScene();virtual bool init();CREATE_FUNC(TestWebSocket);virtual void onOpen(WebSocket *ws);virtual void onMessage(WebSocket *ws,const WebSocket::Data &data);virtual void onClose(WebSocket *ws);virtual void onError(WebSocket *ws,const WebSocket::ErrorCode& error);private:// 创建对象WebSocket *wsText;
};#endif // __TestWebSocketScene_SCENE_H__

源文件:

#include "TestWebSocketScene.h"Scene* TestWebSocket::createScene()
{auto scene = Scene::create();auto layer = TestWebSocket::create();scene->addChild(layer);return scene;
}bool TestWebSocket::init()
{if ( !Layer::init() ){return false;}Size size = Director::getInstance()->getWinSize();wsText = nullptr;auto menu = Menu::create();menu->setPosition(Vec2::ZERO);addChild(menu);auto lblSendText = Label::create("init websocket","Arial",22);auto menuSendText = MenuItemLabel::create(lblSendText,[=](Ref *sender){wsText = new WebSocket();// 初始化请求地址if( !wsText->init(*this,"ws://echo.websocket.org")){// 初始化失败则删除CC_SAFE_DELETE(wsText);};});menuSendText->setPosition(size/2);menu->addChild(menuSendText);auto lblSend = Label::create("send","Arial",22);auto menuSend = MenuItemLabel::create(lblSend,[=](Ref *sender){if (wsText!=nullptr){// 发送数据wsText->send("hello websocket.");}});menuSend->setPosition(size.width/2,size.height/2-50);menu->addChild(menuSend);auto lblSendBinary = Label::create("sent Binary","Arial",22);auto menuSendBinary = MenuItemLabel::create(lblSendBinary,[=](Ref *sender){if (wsText!=nullptr){char buffer[] = "hello \0 binary";wsText->send((unsigned char *)buffer,sizeof(buffer));}});menuSendBinary->setPosition(size.width/2,size.height/2-100);menu->addChild(menuSendBinary);return true;
}void TestWebSocket::onOpen(WebSocket *ws){log("webSocket (%p) open",ws);// webSocket没有http那种tag用于区分不同的请求// webSocket使用如下方法区分不同请求if (ws==wsText){log("WebSocket send Text open");}}void TestWebSocket::onMessage(WebSocket *ws,const WebSocket::Data &data){log("webSocket (%p) receive message",ws);if (!data.isBinary){//文本数据log("received message is :%s",data.bytes);}else//二进制数据的处理{std::string result;for (int i = 0; i < data.len; i++){if (data.bytes[i]!='\0'){result +=data.bytes[i];}else{result += "\'\\0\'";}}log("received binary data is: %s",result.c_str());}
}void TestWebSocket::onClose(WebSocket *ws){log("webSocket (%p) close",ws);if (ws==wsText){log("WebSocket send Text close");}
}void TestWebSocket::onError(WebSocket *ws,const WebSocket::ErrorCode &error){log("WebSocket (%p) error",ws);if (ws==wsText){log("WebSocket send Text error");}
}

Cocos2dx WebSocket的使用相关推荐

  1. Cocos2d-x 3.x如何通过WebSocket连接服务器进行数据传输

    WebSocket 首先新建一个空的文件夹,通过npm安装nodejs-websocket: 1 npm install nodejs-websocket 新建app.js文件: 1 2 3 4 5 ...

  2. 整合quickx到普通cocos2dx

    quickx是对cocos2dx的lua扩展,它做了一些C++的扩展,同时还在lua做了一些封装, 让用lua开发cocos2dx更快,中文站http://quick.cocoachina.com/. ...

  3. [DONE]ReferenceError: WebSocket is not defined pomelo

    使用cocos2d-x 3.0 + pomelo-cocos2d-jsb 原因是没有注册 websocket 只要在 AppDelegate.cpp 加上如下就可以了 sc->addRegist ...

  4. 在cocos creator 中使用websocket

    客户端 参考:https://allknowboy.com/posts/e8f856f4/ NetConfig.js /*** 当前的网络配置*/ module.exports={host:" ...

  5. Cocos2d-x 3.0final 终结者系列教程03-源代码文件夹说明

    话说今天从霍营到回龙观,走到天鑫家园东路.我肋哥去,堵死我啦.7:30出门,9:10还没到回龙观. 北京这交通真是坑爹.回过头想想.怪自己走小路,有时候确实快.可有时候真堵. 堵了35分钟后果断掉头, ...

  6. c++ websocket客户端_WebSocket协议详解与c++amp;c#实现

    摘要: 随着手机游戏.H5游戏以及微信小游戏的普及,越来越多的客户端-服务器端的通讯采用websocket协议.Websocket协议是全双工的.基于数据帧的.建立在tcp之上的长连接协议.Webso ...

  7. 如何使用WebSocket

    from:http://cn.cocos2d-x.org/tutorial/show?id=526 介绍 WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.在Web ...

  8. 【cocos2dx面试题干货】--2021年最新cocos2dx面试干货(引擎篇)

                [cocos2dx面试题干货]--2021年度最新cocos2dx面试干货(引擎篇 )     大家好,我是Lampard~~   经过春招一番艰苦奋战之后,我终于是进入了心仪 ...

  9. 购买李宁Cocos2d-x套餐,送最新出的《Cocos2d-x游戏实战指南》签名书一本

    活动时间:2016-10-18至2016-11-30 通过本套餐,可完全了解Cocos2d-x 3.x的相关技术,以及掌握C++语言,并具有一定的项目实战经验. Cocos2d-x游戏开发套餐:htt ...

最新文章

  1. P4113 [HEOI2012]采花 树状数组离线
  2. Python提升“技术逼格”的6个方法
  3. c语言程序课程设计问题,矩形问题-C语言程序课程设课程设计(论文).doc
  4. jboss将war放在那?_将策略插入JBoss Apiman
  5. leetcode1415. 长度为 n 的开心字符串中字典序第 k 小的字符串(回溯)
  6. 服务器centos安装mysql_centos下安装mysql服务器的方法
  7. iPhone 13系列将搭载A15芯片:相比前代性能提升20%
  8. ITK+VTK+VS环境搭建.Q:vs编译出问题参见VTK(一)哈。
  9. OpenCL快速入门
  10. 笔记本怎样做无线打印服务器,自己的笔记本怎么连打印机_笔记本怎样无线连接打印机...
  11. Bootstrap可视化布局系统需要引入的静态资源
  12. Python爬英雄联盟lol全英雄皮肤
  13. 科技复原,3000多前年的木乃伊「发声」了
  14. 多文件自平衡云传输 (六)番外篇 —————— 开开开山怪
  15. 国产FPGA高云GW1NSR-4C,集成ARM Cortex-M3硬核
  16. cocos2dx fnt字体、自定义字体制作
  17. Vuex是什么?如何理解和应用?
  18. 浅谈Java语言中八种基本数据类型
  19. AirDisk存宝离线怎么回事?怎么解决?
  20. HTML5废弃的标签和属性

热门文章

  1. proected 模式
  2. 通信网络安全与保密综述报告——无线通信系统网络安全发展的现状、趋势及新技术
  3. 查看电脑配置信息方法
  4. 一步步学习微软InfoPath2010和SP2010--第三章节--表单设计基础:处理InfoPath布局、控件和视图(6)--添加控件到Flight Delay表单
  5. 怎么使小数点后面的数可以读取
  6. 【动态规划】套汇问题(Floyd算法)
  7. 问题 E: 货币套汇
  8. React map遍历点击获取key
  9. Linux九阴真经之九阴白骨爪残卷3(DHCP、TFTP服务的安装与启动以及PXE安装Centos7)...
  10. 第一篇博文——与诸位共勉