工业互联-Mqtt数据交换协议(客户端订阅消息)

客户端订阅消息实现:

 1         public static void Subscribte(Socket socket)
 2         {
 3             List<byte> reqBytes = new List<byte>();
 4             // 固定报头
 5             byte byte1 = 8 << 4; 
 6             byte1 |= 2; // 订阅信息置1
 7             reqBytes.Add(byte1);
 8 
 9             List<byte> bytes = new List<byte>();
10             // 可变报头
11             ushort pid = 50;
12             bytes.Add((byte)(pid / 256));
13             bytes.Add((byte)(pid % 256));
14 
15             // 载荷信息
16             // 订阅topic名称
17             string topic = "test1";
18             byte[] t_bytes = Encoding.ASCII.GetBytes(topic);
19             bytes.Add((byte)(t_bytes.Length / 256));
20             bytes.Add((byte)(t_bytes.Length % 256));
21             bytes.AddRange(t_bytes);
22             // QoS  服务质量(0,1,2),不能超过2
23             // 0:最多发送成功一次;1:最少发送成功一次;2:确保发送成功一次
24             bytes.Add(1);
25             topic = "test2";
26             t_bytes = Encoding.ASCII.GetBytes(topic);
27             bytes.Add((byte)(t_bytes.Length / 256));
28             bytes.Add((byte)(t_bytes.Length % 256));
29             bytes.AddRange(t_bytes);
30             // QoS 2
31             bytes.Add(2);
32 
33             // 添加报文长度
34             reqBytes.AddRange(Trans.LengthEncode(bytes.Count));
35             reqBytes.AddRange(bytes);
36 
37             socket.Send(reqBytes.ToArray());
38         }
39     }

 

posted @ 2023-08-13 16:45  逆风起降  阅读(19)  评论(0编辑  收藏  举报