oneNET 免費服務器。 MQTT服務器ip地址和端口 183.230.40.39:6002
MQTT協議的14個命令
名字 | 值 | 流向 | 描述 |
CONNECT | 1 | C->S | 客戶端請求與服務端建立連接 |
CONNACK | 2 | S->C | 服務端確認連接建立 |
PUBLISH | 3 | CóS | 發佈消息 |
PUBACK | 4 | CóS | 收到發佈消息確認 |
PUBREC | 5 | CóS | 發佈消息收到 |
PUBREL | 6 | CóS | 發佈消息釋放 |
PUBCOMP | 7 | CóS | 發佈消息完成 |
SUBSCRIBE | 8 | C->S | 訂閱請求 |
SUBACK | 9 | S->C | 訂閱確認 |
UNSUBSCRIBE | 10 | C->S | 取消訂閱 |
UNSUBACK | 11 | S->C | 取消訂閱確認 |
PING | 12 | C->S | 客戶端發送PING(連接保活)命令 |
PINGRSP | 13 | S->C | PING命令回覆 |
DISCONNECT | 14 | C->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