文档章节

weaving-socket (物联网,工业设备)二进制字节通讯协议的支持详解

dreamsfly
 dreamsfly
发布于 2017/07/20 18:38
字数 1557
阅读 657
收藏 1

架构的代码获取地址

http://t.cn/R5pS8up

 

物联网客户端的(二进制)通讯协议详解

此文讲解了,如何编写架构未提供客户端模块的设备语言 应该按照什么样的协议标准编写传输内容。

和服务端如何解析发送这些内容。

1.协议详解

头指令

N段的长度

N段

内容

1bit(固定长度)

1bit(固定长度)

不固定长度

不固定长度

 

头指令:

从0x00-0xff,其中0xff和0x99为保留字段不得使用。

N段的长度:

 为N段的数据位的长度,比如N段的数据为FF,此数据占用1位bit,则N段的长度为1,如果N段数据为,0x100~0xffff,这个数据占位为2BIT,则N段的长度为2,

如果N段的数据为0x10000~0xffffff,则占位3bit,N段的的长度为3,依此类的。

N段:

1此段数据为内容数据的长度,内容如果是1BIT那,N段的数值就是1,如果内容是N bit位,N段的数据就是N。

内容:

此段可自己定义想要的内容可以是,十六进制内容,也可以是其他格式内容,形式不固定,内容不固定。

(在制作物联网项目中,至少要把设备ID,在内容中体现)

 

 

2 特殊协议

心跳包:心跳包是从服务器发出的,所以客户端不需要发送心跳包,

客户端需要接受心跳包,并将心跳包过滤。

心跳包为,单字节0x99,客户端如遇到单字节0X99,需要把接收时间调整到最新。接收到非心跳包也要更新接收时间。

客户端如果超过60-90秒,未更新最新接收时间,则认为连接超时,需要重新连接。

内置指令:

0xff,为服务内置指令,此指令头包含作用为

1.服务已满员,需要连接其他服务、

2.获取中间层的tokenID,如果用到中间转发层的话,tokenid是唯一标识,否则不予以转发也不能收到信息。

3.服务器其他通知或内容。(可自定义)

 

 

示例

简单描述就是:

头指令,是代表了一个CLASS类,每定义一个头指令,后台处理就要对应一个CLASS

,我这里为了方便,全部定义为0X01,也就是后台只需要用一个CLASS就能处理。

N段的长度

N段

都是通过计算获得的,不固定。

内容是可以自己随便定义的。

我这里定义的前两个字节,定义为具体的方法。你可以认为是,你后端处理CLASS类的具体调用的某一个方法。

 

登录(客户端发送):

头指令

N段的长度

N段

内容

0x01

通过计算N段的长度

通过计算内容的长度

(固定2BIT-代表后端的登录方法)

0X000A

(N bit -设备ID编号)

例如设备ID编号是固定的8位4BIT

0x00000001

 

登录组合示例:

0x01(头指令)  0X01(0x0C的长度)  0X6(后面内容的长度,十进制就是12)  0X000A00000001

 

返回验证及令牌(客户端接收):

头指令

N段的长度

N段

内容

0x01

通过计算N段的长度

通过计算内容的长度

(固定2BIT-代表后端的登录方法)

0X000A

(N bit -返回的TOKEN)

例如 固定8位4BIT

0x10000011

 

示例:

0x01(头指令)  0X01(0x0C的长度)  0X6(后面内容的长度,十进制就是12)  0X000A10000011

 

 

查询(客户端/服务端-发送):

头指令

N段的长度

N段

内容

0x01

通过计算N段的长度

通过计算内容的长度

(固定2BIT-代表查询的某个方法)

0X00A1

(N bit -登录的令牌TOKEN)

例如 固定8位

0x10000011

 

 

查询结果(客户端/服务端-接收):

头指令

N段的长度

N段

内容

0x01

通过计算N段的长度

通过计算内容的长度

(固定2BIT-代表查询的某个方法)

0X00A1

(N bit -返回的结果)

可以是UTF-8字符的的二进制形式。可以是自己定义的值

 

 

 

 

心跳:服务端架构自带,无需定义:

客户端只需要按照 特殊协议,心跳包的解析方法就可以了。

3发包例子

其中ConvertToByteList 是把INT类型,转换长BTYE[]数组,然后得到数组的长度(占位)。

非常简单的组装。2是头部的固定2BIT,一个是头指令,一个是N段的长度。

 

 

解包例子

接收到数据如果第一位是0X99则消除它,然后将其他的内容,增加到等待解包队列。更新接收时间,防止出错。

 

解包队列方法

发现第一位是0x99,则消除它

如果过滤后,字符大于2则,看看整个协议的内容到底有多长

如果当前的的值太少了,则吧队列的下一组数据合并到这组数的后面,如果

当前数值太多,则把多余的数值,合并到下组数据的最前面。然后把当前的数值存入临时变量中。从列队中删除这组数据。

最后把正确的数据,拆开分成,头指令和具体内容。

 

 

   按字节发送的服务端使用方法

 

首先使用服务端架构的时候,要先了解基本用法,可以参照

https://my.oschina.net/u/2476624/blog/893783

这个教程内容。

再次基础上,只需要做一些小小的变动。

在最新更新的运行器中,选择BYTESCOKET,意思就是按字节发送的SOCKET的。

选择后

会需要填写一个完整的命名空间与类名。

,可以在运行器项目中创建一个类文件

创建的类需要继承 IDataparsing 接口,此接口有4个方法要实现,可以参考

 

最后,后端的处理逻辑就和

https://my.oschina.net/u/2476624/blog/893783

讲的一摸一样了。

 

© 著作权归作者所有

共有 人打赏支持
dreamsfly

dreamsfly

粉丝 24
博文 6
码字总数 12763
作品 2
郑州
CTO(技术副总裁)
【重大更新】开源跨平台物联网通讯框架ServerSuperIO 2.0(SSIO)下载

更新具体细节参见:[更新设计]跨平台物联网通讯框架ServerSuperIO 2.0 ,功能、BUG、细节说明,以及升级思考过程! 声明:公司在建设工业大数据平台,SSIO正好能派上用场,所以抓紧时间进行了...

唯笑志在
2016/08/17
0
0
《连载 | 物联网框架ServerSuperIO教程》- 9. 协议过滤器,解决一包多发、粘包、冗余数据

1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明 《连载...

唯笑志在
2016/11/20
0
0
《连载 | 物联网框架ServerSuperIO教程》- 8.单例通讯模式开发及注意事项

1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明 《连载...

唯笑志在
2016/11/18
0
0
详解物联网的中间件:为何说它是不可或缺的?

互联网的大规模普及,拉近了人与人之间的交流,而不同国家人与人之间的交往也变得密切起来。由于彼此使用的语言不通,为了能够互相交流,我们需要将不同种的交流语言转换成对方可识别的信息,...

玄学酱
04/20
0
0
《物联网框架ServerSuperIO教程》-21.终端控制传感器或设备,形成回路控制。附:demo源代码

21.1 概述 ServerSuperIO以前所做的工作逐步为形成回路控制或级联控制打下基础,例如:服务连接器和设备驱动连接器的开发与应用。总之,是通过多种形式下发命令控制设备(驱动)或传感器,云...

唯笑志在
2017/06/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
34分钟前
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
0
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
1
0
设计模式之五 责任链模式(Chain of Responsibility)

一. 场景 相信我们都有过这样的经历; 我们去职能部门办理一个事情,先去了A部门,到了地方被告知这件事情由B部门处理; 当我们到了B部门的时候,又被告知这件事情已经移交给了C部门处理; ...

JackieRiver
今天
1
0
Android中的设计模式之命令模式

参考 《设计模式:可复用面向对象软件的基础 》5.2 Command 命令 对象行为型模式 《Android源码设计模式解析与实战》第11章 让程序畅通执行--命令模式 意图 将一个请求封装为一个对象,从而使...

newtrek
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部