MQTT协议之中国移动ONENET

oneNET 免费服务器。 MQTT服务器ip地址和端口 183.230.40.39:6002 

MQTT协议的14个命令

名字流向描述
CONNECT1C->S客户端请求与服务端建立连接
CONNACK2S->C服务端确认连接建立
PUBLISH3CóS发布消息
PUBACK4CóS收到发布消息确认
PUBREC5CóS发布消息收到
PUBREL6CóS发布消息释放
PUBCOMP7CóS发布消息完成
SUBSCRIBE8C->S订阅请求
SUBACK9S->C订阅确认
UNSUBSCRIBE10C->S取消订阅
UNSUBACK11S->C取消订阅确认
PING12C->S客户端发送PING(连接保活)命令
PINGRSP13S->CPING命令回复
DISCONNECT14C->S断开连接

首先需要申请服务器,建立一个产品,产品下申请两个设备(需要记住产品ID,设备ID、鉴权信息)

app_col
客户端ID(设备ID):aaaaa5188
用户名(产品ID):bbbbb5
密码(鉴权信息):cccccc


connect(1)连接服务器

10  ?? 
固定报头 +长度
byte1  客户端连接服务器
byte2  byte2后面所有字节数

00 04 
长度+可变报头
byte1  长度MSB  00  固定
byte2  长度LSB    04  固定
byte3  M   4d
byte4  Q    51 
byte5  T     54 
byte6  T     54
byte7   4    版本
byte8   c2
user name flag  1  用户名
password  flag   1  密码
will retain        0  ?? 没懂
will qos   0  ??没懂
will flag   0      ??没懂
clean session    1  服务器清除不保留
reserved  0

byte9         00      keep alive MSB   (秒为单位)2min
byte10        78     keep alive LSB    (秒为单位)2min


负载报头  长度+客户端id+长度+产品id+长度+密码
app_col
aaaaa5188 转ASCII(9个) a a a a a 35 31 38 38

bbbbb5 转ASCII(6个)bbbbb 35
ccccc转ASCII(6个)cccccc

10 25 00 04 4d 51 54 54 04 c2 00 78 00 09 a a a a a 35 31 38 38 00 06 bbbbb 35 00 06 cccccc

connack(2)服务器返回

20 02 01 00
byte1 服务器返回
byte2 长度
byte3  不适用离线保存数据
byte4  
00 连接接收
01 连接拒绝,协议不对
02 连接拒绝 客户端标识符不对
03 连接拒绝,服务器不可用
04 连接拒绝,密码不对
05 连接拒绝,未授权
disconnect(14)
固定报头+长度
e0 00 
byte1 客户端自行断开服务器
byte2 命令后面无数据

ping(12)
固定报头+长度
c0 00
byte1客服端发送心跳到服务器
byte2 命令后面无数据

pingrsp(13)
d0 00
byte1服务器返回
byte2 命令后无数据

subscribe(8)订阅报文 


82 ??  00 01 
固定报头+长度+报文标识符
byte1  订阅某个主题
byte2  长度
byte3 报文标识符MSB  第1号报文
byte4 报文标识符LSB    第1号报文

长度+可变报文 +报文等级

主题:kfb_topic 转ASCII (9个)6B 66 62 5F 74 6F 70 69 63
等级 0,1,2

发送数据 :82 0E 00 01 00 09 6B 66 62 5F 74 6F 70 69 63 00   1号报文,等级0
返回90 03 00 01 00

发送数据:82 0E 00 15 00 09 6B 66 62 5F 74 6F 70 69 63 00  21号报文,等级0
返回90 03 00 15 00


suback(9) 订阅成功 服务器返回
90 03 00 15 00
90 03 00 01 00
byte1 服务器返回
byte2 长度
byte3  报文标识符MSB 
byte4 报文标识符LSB
byte5 等级0


nusubscribe(10)取消订阅 主题:kfb_topic 
A2 0d 00 01 00 09 6B 66 62 5F 74 6F 70 69 63    1号报文,不需要等级
返回:B0 02 00 01

unsuback(11) 服务器返回
byte1 服务器返回命令
byte2 长度
byte3  报文标识符MSB 
byte4  报文标识符LSB

kfb_col
设备ID:ddddd5205
用户名(产品ID):eeeee5
鉴权信息:ffffff


connect(1)
10  ?? 
固定报头 +长度
byte1  客户端连接服务器
byte2  byte2后面所有字节数

00 04 
长度+可变报头
byte1  长度MSB  00  固定
byte2  长度LSB    04  固定
byte3  M   4d
byte4  Q    51 
byte5  T     54 
byte6  T     54
byte7   4    版本
byte8   c2
user name flag  1  用户名
password  flag   1  密码
will retain        0  ?? 没懂
will qos   0  ??没懂
will flag   0      ??没懂
clean session    1  服务器清除不保留
reserved  0

byte9         00      keep alive MSB   (秒为单位)2min
byte10        78     keep alive LSB    (秒为单位)2min


负载报头  长度+客户端id+长度+产品id+长度+密码
kfb_col
ddddd5205 转ASCII(9个) ddddd35 32 30 35

eeeee5 转ASCII(6个)eeeee 35
ffffff转ASCII(6个)ffffff

10 25 00 04 4d 51 54 54 04 c2 00 78 00 09 ddddd35 32 30 35 00 06 eeeee 35 00 06 ffffff

subscribe(8)订阅报文 
82 ??  00 01 
固定报头+长度+报文标识符
byte1  订阅某个主题
byte2  长度
byte3 报文标识符MSB  第1号报文
byte4 报文标识符LSB    第1号报文

长度+可变报文 +报文等级

主题:app_topic 转ASCII (9个)61 70 70 5F 74 6F 70 69 63
等级 0,1,2


app主题
82 0E 00 01 00 09 61 70 70 5F 74 6F 70 69 63 00   订阅app主题 1号报文,等级0
82 0E 00 01 00 09 61 70 70 5F 74 6F 70 69 63 01   订阅app主题 1号报文,等级1
kfb主题
82 0E 00 01 00 09 6B 66 62 5F 74 6F 70 69 63 00   订阅kfb主题 1号报文,等级0
82 0E 00 01 00 09 6B 66 62 5F 74 6F 70 69 63 01   订阅kfb主题 1号报文,等级1


publish(3)发布消息 等级0

30 ??
bit7-bit4  发布命令  
bit3 dup 表示可能是重复发送的 早期消息
bit2-bit1 QoS等级
bit0 retain  保留消息

报文标识符  等级0 没有

可变报文 +有效载荷


kfb发布
30 0f 00 09 6B 66 62 5F 74 6F 70 69 63 31 32 33 34   kfb_topic发布等级0 ,无报文标识符,数据1234

app发布
30 0f 00 09 61 70 70 5F 74 6F 70 69 63 35 36 37 38   app_topic发布等级0 ,无报文标识符,数据5678


publish(3)发布消息 等级1 需要 报文标识符
kfb发布
32 11 00 09 6B 66 62 5F 74 6F 70 69 63 00 01 31 32 33 34   kfb_topic发布等级1 ,报文标识符 1号,数据1234
app发布
32 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38   app_topic发布等级1 ,报文标识符1号,数据5678

publish(3)发布消息 等级2 需要 报文标识符
kfb发布
34 11 00 09 6B 66 62 5F 74 6F 70 69 63 00 01 31 32 33 34   kfb_topic发布等级2 ,报文标识符 1号,数据1234
app发布
34 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38   app_topic发布等级2 ,报文标识符1号,数据5678

puback(4) 等级1 返回
byte1 表示命令  返回等级1
byte2 表示长度
byte3-byte4  表示回复报文标识符
40 02 00 01  等级1 回复 表示签收 

pubrec(5)等级2 返回
50 02 00 01

pubrel(6)等级2 再次询问
62 02 00 01

pubcomp(7)等级2 返回
70 02 00 01

 

打开串口助手或者网络助手,设置为TCPClient,主机ip 183.230.40.39:6002 点击连接后

app_col客户端向服务器发送   10 25 00 04 4d 51 54 54 04 c2 00 78 00 09 a a a a a 35 31 38 38 00 06 bbbbb 35 00 06 cccccc

服务器返回 20 02 01 00

kfb_col客户端向服务器发送    10 25 00 04 4d 51 54 54 04 c2 00 78 00 09 ddddd35 32 30 35 00 06 eeeee 35 00 06 ffffff

服务器返回 20 02 01 00

断开连接   e0 00 

发送心跳  c0 00    服务器返回 d0 00

app_col 客户端向kfb_col客户端发消息。可以理解为kfb_col是app_col的粉丝,kfb_col关注了app_col。app_col一旦需要发送消息给kfb_col,相当于app_col发布一条消息由服务器推送给kfb_col。

kfb_col需要订阅app_col,相当于kfb_col需要关注app_col

kfb_col客户端订阅app_col的主题app_topic(等级0)

kfb_col客户端发送 82 0E 00 01 00 09 61 70 70 5F 74 6F 70 69 63 00   订阅app主题 1号报文,等级0

服务器返回 90 03 00 01 00

订阅成功

app_col客服端推送消息 

 30 0f 00 09 61 70 70 5F 74 6F 70 69 63 35 36 37 38   app_topic发布等级0 ,无报文标识符,数据5678

kfb客户端收到消息

30 0f 00 09 61 70 70 5F 74 6F 70 69 63 35 36 37 38

kfb_col客户端订阅app_col的主题app_topic(等级1)一次确认

kfb_col客户端发送 82 0E 00 01 00 09 61 70 70 5F 74 6F 70 69 63 01   订阅app主题 1号报文,等级1

服务器返回 90 03 00 01 01

订阅成功

app_col客服端推送消息 

 32 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38   app_topic发布等级1 ,报文标识符1号,数据5678

kfb客户端收到消息

 32 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38

app_col 客户端收到服务器返回  40 02 00 01

kfb_col客户端订阅app_col的主题app_topic(等级2)两次确认

kfb_col客户端发送 82 0E 00 01 00 09 61 70 70 5F 74 6F 70 69 63 02   订阅app主题 1号报文,等级2

服务器返回 90 03 00 01 02

订阅成功

app_col客服端推送消息 

 34 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38   app_topic发布等级2 ,报文标识符1号,数据5678

app_col 客户端收到服务器返回  50 02 00 01    第一次确认

app_col客户端发送  62 02 00 01

app_col 客户端收到服务器返回  70 02 00 01 第二次确认

kfb客户端收到消息

 34 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值