工业互联-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 }