这是一个 luasocket 范例

为了便于使用,我封装了 luasocket 到 cc.net.SocketTCP 类中。这个范例展示如何使用 cc.net.SocketTCP 。

同时,在本范例中还使用了 cc.utils.ByteArray 和 cc.utils.ByteArrayVarint 。

要了解更多关于 cc.net.SocketTCP 和 cc.utils.ByteArray 的信息,请阅读 一个LuaSocket封装 和用lua实现ByteArray和ByteArrayVarint .

在本范例的 net 包中,有3个 lua 类:

  • net.PacketBuffer
    我们收到的数据包经常是不完整的,特别是当数据包比较大的时候。因此我们必须确保数据包完整才能使用。PacketBuffer 就是做这件事的。
  • net.Protocol
    这个类把数据包解析成人类可读的格式。它转换一个数据包到一个lua table,并且为每个数据项命名。数据项的名称定义在 net.protocols 文件中。
  • net.protocols
    这是你的协议定义文件。你可以写一个生成器程序来生成它。

下面是本范例运行的log文件。当然,你需要自己实现服务端程序。

[0.2467] [INFO] socket.getTime:1389319197.462940
[0.2472] [INFO] os.gettime:1389319197.000000
[0.2477] [INFO] socket._VERSION: LuaSocket 2.1-rc1
[0.2530] [INFO] Scene "MainScene:onEnter()"
[1.9754] [INFO] socket status: SOCKET_TCP_CONNECTED
[5.8635] send 1000 packet: 86 7B 00 0B 00 00 00 B1 04 00 03 00 08 10 C0 3E 01 01
[5.8859] socket receive raw data: 86 7B 00 60 00 00 00 00 7D 00 0D 00 09 11 18 20 28 30 38 40 48 50 58 60 00 3C 63 73 76 3D 34 38 32 28 30 31 30 39 2E 31 35 33 32 32 38 29 0A 66 73 3D 31 33 31 28 30 31 30 39 2E 31 35 33 31 35 31 29 0A 67 73 3D 33 35 32 28 30 31 30 39 2E 31 38 30 33 32 37 29 04 74 65 73 74 00 14 50 D6 03 96 01 00 00 00 0F 6E 103
[5.8873] start analyzing... buffer len: 103, available: 103
[5.8878] method:2000
[5.8884] before get meta position:11
[5.8897] after get meta position:25
[5.8904] after get body position:104
[5.8909] dump from: [string "d:/cocos2dx/quick/samples/luasocket/scripts/scenes/MainScene.lua"]:54: in function <[string "d:/cocos2dx/quick/samples/luasocket/scripts/scenes/MainScene.lua"]:48>
[5.8921] - "<var>" = {
[5.8924] - "body" = {
[5.8931] - "ap" = 0
[5.8938] - "crystal" = 150
[5.8944] - "dust" = 0
[5.8950] - "gold" = 470
[5.8955] - "goodsMaxNum" = 110
[5.8959] - "goodsNum" = 15
[5.8965] - "lv" = 20
[5.8971] - "mithril" = 0
[5.8975] - "money" = 80
[5.8981] - "flag" = 0
[5.8987] - "name" = "test"
[5.8993] - "sex" = 0
[5.8999] - "ver" = "csv=482(0109.153228)\nfs=131(0109.153151)\ngs=352(0109.180327)"
[5.9008] - }
[5.9013] - "method" = 2000
[5.9019] - "ver" = 0
[5.9025] - }

基于quick-cocos2d-x的LuaSocket范例的更多相关文章

  1. 【Q2D】如何导出自定义C++类给框架使用

    本文基于Quick cocos2d x这个游戏框架,为了行文流畅,后面都简称Q2D 导出自定义c++类给项目使用已经有了现成的例子了 详见:http://quick.cocos.org/?p=235 ...

  2. 基于 UML 的业务建模举例

    简介: 对于管理流程咨询项目.大型信息化建设项目和套装管理软件实施项目,对业务环境的分析和理解对项目的成功至关重要.系统.全面理解 IT 系统所处的业务环境,可以帮助 IT 系统能提供正确系统功能,并 ...

  3. Quick BI功能篇之(一):20分钟入门

    前言: 最近小编帮助隔壁团队一个小姐姐解决了个大难题:给老板汇报业绩分析,频次提高.效率提升,还得保证团队中的小伙伴们都得有点大数据时代的基本数据能力.小编觉得这么好的经验可以分享给更多志同道合的朋友 ...

  4. Quick BI独创千人千面的行级权限管控机制

    摘要 就数据访问权限而言,阿里巴巴以“被动式授权”为主,你需要什么权限就申请什么权限.但是,在客户交流过程中,我们发现绝大多数企业都是集中式授权,尤其是面向个人的行级权限管控,管理复杂度往往呈几何增长 ...

  5. SaaS系列介绍之十三: SaaS系统体系架构

    1 系统体系架构设计 软件开发中系统体系架构决定了一个系统稳定性.健壮性.可扩展性.兼容性和可用性,它是系统的灵魂.体系架构是架构师所关注的核心.良好的体系架构是系统成功的开端,否则,再好的代码与设计 ...

  6. OpenStackCLI调试及术语识记

    1,Project are organizational units in the cloud,and are also known as tenants or accounts.Each user ...

  7. man rsync翻译(rsync命令中文手册)

    本文为命令rsync的man文档翻译,几乎所有的选项都翻译了,另外关于筛选规则部分只翻译了一部分.由于原文很多地方都比较啰嗦,所以译文中有些内容可能容易让国人疑惑,所以我个人在某些地方加上了注释.若有 ...

  8. RTKLIB编译及RTCM数据读取样例

    1.RTKLIB简介 RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包,RTKLIB由日本东京海洋大学( ...

  9. QT QQuickView嵌入到QT MDI中

    在学习QT的过程中发现有一个特别炫酷的行星例子“planets”,有两种实现版本: 一种是基于Qt 3D QML(planets-qml),另一种则是基于Quick和强大的Three.js(plane ...

随机推荐

  1. 转:一位10年Java工作经验的架构师聊Java和工作经验

    黄勇( 博客),从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师.对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式.国内开源 ...

  2. ivy由于sha1码不正确导致找不到模块(jar)的错误

    sbt设置jboss-interceptor-api-1.1作为依赖,但是找不到 [info] Resolving org.jboss.interceptor#jboss-interceptor-ap ...

  3. Spring框架学习(6)使用ioc注解方式配置bean

    内容源自:使用ioc注解方式配置bean context层 : 上下文环境/容器环境 applicationContext.xml 1 ioc注解功能 注解 简化xml文件配置 如 hibernate ...

  4. 图解aclocal、autoconf、automake、autoheader、configure

    http://www.laruence.com/2008/11/11/606.html 本文地址: http://www.laruence.com/2008/11/11/606.html 转载文章 原 ...

  5. python读取文件特定的行数

    from itertools import islice f=open("pyhpd.txt") for a in islice(f,2,6): print(a)

  6. Struct2-使用随笔

    提要:最近写了一个2-3各页面的使用Struts2的Demo,在这里做下总结,都已经3年多没做J2EE了,有些感觉都快找不到了. 目录 1.必备开发工具 2.必备jar包 3.了解知识点 4.遇到的问 ...

  7. Android蓝牙开发

    Android蓝牙开发 近期做蓝牙小车,须要Android端来控制小车的运动.以此文记录开发过程. 使用HC-06无线蓝牙串口透传模块.对于其它的蓝牙设备本文相同适用. 蓝牙开发的流程: 获取本地蓝牙 ...

  8. Grunt快速使用笔记

    本篇文章由:http://xinpure.com/grunt-quick-note/ http://www.gruntjs.net/getting-started Grunt中文网 安装 Grunt ...

  9. Solr 缓存配置

    http://www.blogjava.net/xiaohuzi2008/archive/2012/12/03/392376.html

  10. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...