一、主要架构
1、客户端和服务端模式。
2、以传输层TCP协议为基础。
3、服务端的端口固定在9999,可以修改。
二、物联网终端设备的作用
1、采集信息,传给云端
需要终端设备作为客户端,主动连接远程的服务器。
2、接受远程控制中心的命令
需要作为服务端,接受控制中心客户端的连接,接受命令,反馈执行结果。
总结:物联网设备需要同时担任客户端和服务端两种身份。
三、需要传递的信息种类
本文假设:物联网设备是服务端,控制中心是客户端。
1、客户端发起的命令
例如:获取最新的参数,关闭或者打开某个功能。
2、服务端返回执行结果
返回执行成功或者失败的结果。
四、协议格式如下
(一)登录包(客户端给服务端)
类型(1字节,值为0x00)
用户名长度(2字节)
用户名字节序列
摘要值长度(2字节)
密码摘要值大写十六进制字符的字节序列
(二)命令数据包格式(客户端给服务端)
类型(1字节,值为0x01)
命令代号(2字节)
名字长度(1字节)
命令名字的字节序列(长度指定)
参数个数(1字节)
参数集合(指定个数的参数单元组成)
说明:
命令需要用户具体制定。
假设命令如下:
代号 名字 参数
100 open 管脚编号:字符串类型
101 close 管脚编号:字符串类型
102 open-auto-send 功能编号,整型
103 config-set 名:字符串 值:字符串
104 get-temp 设备号:字符串
105 get-light 设备号:字符串
(三)执行结果包(服务端给客户端)
类型(1字节,值为0x01)
结果代号(2字节)
参数个数(1字节)
参数集合(指定个数的参数单元组成)
假设结果代号如下:
1 代表登录成功
2 代表登录失败
3 代表命令执行成功
4 代表命令执行失败
五、参数基本单元的格式
在命令包和执行结果包中都有参数集合。
参数集合由连续的基本单元组成。
基本单元的组成格式如下:
类型(1字节)
参数长度(1字节)
参数的字节序列(长度指定)
类型有下列:
1 是整型
2 是双精度浮点型
3 是字节序列
4 是UTF-8的字符串的字节序列
六、主要通信过程
(一)登录
1、终端正常启动,开启TCP服务端端口监听
2、客户端主动TCP连接终端。
3、客户端发出登录包,携带用户名和密码。
4、终端读取登录包,提取用户名和密码,判断内部用户表:
如果比对成功,返回登录成功的结果包。
如果比对失败,返回登录失败的结果包。
5、客户端读取结果包,判断结果代号:
如果代号为1,代表登录成功。
如果代号为2,代表登录失败。
(二)命令控制
1、已知登录成功。
2、客户端发送一个命令包。
3、终端读取命令包,提取出命令和参数,调用驱动库,执行命令。
4、执行完毕后,没有错误就发送执行成功的结果包。
有错误就发送执行失败的结果包。
5、客户端读取结果包,判断代号是否为执行成功和失败。
(三)关闭连接
1、客户端主动发送关闭连接命令包。
2、终端读取命令包,获取代号,执行关闭方法。
七、总结
1、二进制协议的优点是紧凑,格式精确。
2、提供用户自定义设计命令。
3、需要加密通信,才能安全登录和控制。
4、需要根据要求,约定命令的参数列表。
命令执行后,返回的信息可以编制个数和顺序。
例如:查看设备f3的温度和光照值:
发送命令包:
命令是"get-device",参数是1个,类型是字符串,值是"f3"的字节序列。
执行成功的返回包:
结果代号是3,代表成功;参数是2个,第1个参数是浮点型的温度值,第2个参数是浮点型的光照值。