HTTP协议是不断发送请求和答应来实现实时通信的,这种方式非常浪费贷款,又消耗服务器CPU的占用。

而使用Socket(套接字)技术,则可以避免很多无用的请求,客户端跟服务器建立桥梁后就,服务器就可以简单发送信息给客户端,大幅降低了利用HTTP技术时的消耗。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,是一组接口,所以它并不是一个协议。在设计模式中,Socket是一个门面模式,它把复杂的TCP/IP完全的隐藏了,对用户来说,只要运用这个接口就能完成开发所需。

Socket链接的一般过程有3个步骤:

1、服务器监听:服务器端处于链接等待状态,实时监控网络并等待客户端请求。

2、客户端请求:客户端的套接字提出链接请求(TCP第一次握手),要连接的目标是服务器端的套接字。客户端的套接字必须首先描述它要链接的服务器的套接字,指出其地址和端口号,然后向服务器提出链接请求。

3、链接确认:当服务器套接字监听到客户端套接字的请求时,就会响应客户端的请求,建立新线程并把服务器套接字描述发给客户端(TCP第二次握手),在客户端确认了描述后,双方正式建立连接(TCP第三次握手),而服务器端继续监听其他套接字的请求。

基于传输层的差异,4种不同的Socket:

1*、基于TCP的流套接字:提供给应用层可靠的流式数据服务,使用的协议有BGP、HTTP、FTP、TELNET等。

2*、基于UDP的数据报式套接字:适用于数据传输可靠性要求不高的场合,使用协议有:RIP、SNMP、L2TP。

3、基于rawip的原始套接字:非连接,数据传输不可靠,但可以使应用层直接访问网络层。

4、基于链路层的链路层套接字:费链接,数据传输不可靠,为IS-IS协议提供的套接字接口,使协议可以直接访问链路层。

更多关于Socket的介绍可以百度一下。

如何在Cocos2dx使用Socket:

为了使用Socket协议,我们首先要从了解SocketIO::SIODelegate类开始,它是一个代理类,他为下面的SIOClient类代理了5个处理事件的虚函数。

virtual void onConnect(cocos2d::network::SIOClient* client); //当打开socket连接时会调用这个函数

virtual void onMessage(cocos2d::network::SIOClient* client,const std::string& data);  //当接收到数据时会调用这个函数

virtual void onClose(cocos2d::network::SIOClient* client);  //当socket关闭时会调用这个函数

virtual void onError(cocos2d::network::SIOClient* client,const std::string&data);  //当链接错误时会调用这个函数

virtual void fireEventToScript(cocos2d::network::SIOClient* client,const std::String& eventName,const std::string& data); //当SIOClient对象接收到发送事件信号时转发到脚本层。

SIOClient client 是连接的SIOClient对象   data是传送过来的信息    eventName是事件名称

由于版本的更新,前三个函数已经被废弃,三个事件在新版中会以"connect","message","close"时间触发。

SIOClient类的方法 增加对其了解:

SIOClient(const std::string& host,int port,const std::string& path,SIOClientimpl* impl,SocketIO::SIODelegate* delegate)  //SIOClient的构造函数,参数一是主机地址,参数二是端口号,参数三是终端路径,参数四是SIOClientimpl对象。

SocketIO::SIODelegate* getDelegate() //的到客户端的代理对象。

void send(const std::string& s) //发送一条消息到服务端。

void emit(const std::string& eventname,const std::string& args)  //发送指定事件和参数给客户端,参数一是事件名称,参数二是事件参数。

void on(const std::string& eventName,SIOEvent e) //注册一个套接字事件回调,回调函数通过CC_CALLBACK2使用。参数一是事件名,参数二是回调函数。

void setTag(const char* tag)给SIOClient设置标签。

const char* getTag() //获取标签的get方法

开发实例解释:

1、要使用套接字协议,首先要继承SIODelegate,并且实现必要的虚函数:

class HelloWorld:public cocos2d::Layer,public cocos2d::network::SocketIO::SIODelegate{

......//必要东西

cocos2d::network::SIOClient * _sioClient;  //封装一个SIOClinet类

......//重写上面提及到的必要函数

}

2、打开Socket链接

_sioClient = SocketIO::connect("localhost:8080",*this);  //连接服务器

_sioClient->setTag("Test Client");  //设置标记请求

_sioClient->on("testeventt",CC_CALLBACK_2(HelloWorld::onTest,this)); //注册回调事件,这就是上面提及到用"connect"事件触发的方式。

3、向服务器发送消息的方法

_sioClient->send("sdfasdfdsafs");   //发送sdfasdfdsafs消息给服务器

4、向服务器发送给定的事件和参数

_sioClient->send("testevent","{\"name"}");  //发送事件testevent给服务器,参数是{\"name"}

5、关闭连接

_sioClient->disconnect() //关闭这个套接字

转载于:https://www.cnblogs.com/aibox222/p/9030241.html

Cocos2dx 链接Socket服务器相关推荐

  1. [转|整理]翻译:使用.net3.5的缓存池和SocketAsyncEventArgs类创建socket服务器

    原文地址:http://www.cnblogs.com/onlytiancai/archive/2008/06/25/1229321.html http://www.cnblogs.com/killk ...

  2. socket服务器区分各个客户端信息,socket服务器如何区分哪个客户端

    socket服务器如何区分哪个客户端 内容精选 换一换 要访问您的文件系统,如果是Linux云服务器,您需要在Linux云服务器上安装NFS客户端后使用挂载命令挂载文件系统:如果是Windows云服务 ...

  3. 光猫显示连接isp服务器超时,光猫链接isp服务器超时

    光猫链接isp服务器超时 内容精选 换一换 若已有连接后端服务器超过请求超时时间没有请求传输后,ELB会将其断开.根据负载均衡器与后端服务器链接的协议不同,系统默认超时时间也不同,系统默认的超时时间如 ...

  4. Linux环境下socket服务器搭建

    在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程."IP地址+端口号"就对应一个socket.欲建立连接的两个进程各自有一个 ...

  5. 登录psn 服务器无响应,链接psn服务器超时

    链接psn服务器超时 内容精选 换一换 根据负载均衡器与后端服务器链接的协议不同,系统默认超时时间也不同,系统默认的超时时间如下.TCP协议:默认超时时间为300s.UDP协议:默认超时时间为10s. ...

  6. Xshell链接远程服务器调用Pycharm的方法

    一  在linux服务器安装Pycharm 释放文件: [root@localhost ~]# tar -xzf pycharm-community-2018.1.1.tar.gz 运行下面的命令进入 ...

  7. php运行socket服务器,PHP_php简单socket服务器客户端代码实例,本篇文章分享一个简单的socket - phpStudy...

    php简单socket服务器客户端代码实例 本篇文章分享一个简单的socket示例,用php.实现一个接收输入字符串,处理并返回这个字符串到客户端的TCP服务. 产生一个 socket 服务端 /*文 ...

  8. ActionScript接收socket服务器发送来的数据

    原文地址:http://www.asp119.com/news/2009522181815_1.htm 从socket中接收数据的方法取决于你使用socket类型,Socket和XMLSocket都可 ...

  9. 210130阶段三socket服务器

    目录 一.学习的知识点 基于socket服务器 socket函数 bind函数 listen函数 accept函数 二.上课没有听懂或者没有理解的地方 三.当天学习的收获 一.学习的知识点 每个上网的 ...

  10. mac终端连接linux中断,Mac电脑iTerm2链接Linux服务器断线解决方案

    问题 用Windows链接Linux服务器,方式很多,我最经常用的是xshell.但是xshell没有mac版,那用mac电脑,比较好的命令行软件是什么呢?我用的是iTerm2 ,这个功能确实蛮强大, ...

最新文章

  1. 北航学长的《数据竞赛入门讲义》分享:我是靠这些拿到冠军的
  2. ext2.2打造全新功能grid系列--仅仅动态生成GridPanel
  3. 项目整体管理:项目整体管理实现过程
  4. 深度学习和目标检测系列教程 6-300:目标检测Fast-RCNN架构
  5. java poi excel 单元格样式_java poi批量导出excel 设置单元格样式
  6. java获取主机信息大全,网络编程:Java获取网络主机信息
  7. 纵横公路造价软件学习_通辽分公司组织开展2020年 养护工程造价预算培训
  8. FreeRTOS调度器挂起与解除
  9. 软件测试的基础知识(三)
  10. 一种H.264高清视频的无参考视频质量评价算法(基于QP和跳过宏块数)
  11. go语言的文件简单的操作
  12. WebForm读取指定的config文件的内容
  13. CCNA考试题库中英文翻译版及答案12
  14. 蚂蚁金服2019实习生面经总结(已拿口头offer)
  15. Android利用WifiDirect实现文件传输功能
  16. 我的jQuery学习之路(笔记)——四
  17. 李开复哥大毕业演讲:工程师的AI银河系漫游指南
  18. 了解线性分组码的编码原理并编程实现C语言,线性分组码的编译码(DOC).doc
  19. Win10任务栏图标无法右键/取消固定
  20. No.051<软考>《(高项)备考大全》【冲刺5】《软考之 119个工具 (3)》

热门文章

  1. c语言中ox1小于小于a,丹江口市2018适应性数学试卷和答案
  2. php基础之字符串和数组的相互转换及其常用属性(与js相对应的属性 比较)
  3. JavaScript GET 和 POST 请求的区别详解
  4. 阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
  5. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_14maven工程servlet实例之指定web文件夹...
  6. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_9_字节输入流读取字节数据...
  7. 蓝桥杯刷题 -- 第六届蓝桥杯
  8. 3-4 创建一个新的项目
  9. PouchDB 基础
  10. css3实现进度条的模拟