我是靠谱客的博主 兴奋胡萝卜,这篇文章主要介绍MQTT协议C语言实现-接收服务器推送消息处理编程思路简介,现在分享给大家,希望可以做个参考。

目录

  • 编程思路简介

编程思路简介

服务器一次推送的消息可能不止一条,可能是多条消息打包推送的,所以在解读每条消息之前,我们先要解包,把消息逐条提取存放

接受的数据 = n个消息组成
消息的长度 = 剩余长度 + 剩余长度所占字节 + 1

代码实现

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
typedef struct { u8 message_Cnt; //消息的条数 u16 message_Leng[message_RecMax]; u8 message[message_RecMax][message_RecLeng]; //消息缓冲区 }publish_RecDataStruct; 之所以这样定义结构体,为了方便数据的读取 void publish_RecPackAnalys(u8 *rec_Data) { u8 i; u32 rec_DataLeng; //接受字节总长 u32 remind_Leng = 0; //剩余长度 u8 remind_LengLocal = 1; //剩余长度 在单个消息中所在当前位置 u8 remind_LengByteCnt = 0; //剩余字节所占位数 u16 message_Loacl; u8 *rec_DataBkp = rec_Data; // rec_DataLeng = 15; //测试使用 rec_DataLeng = mqtt_RxSta & 0X7F; //得到接受数据的总长度 do { publish_RecData.message_Cnt++; //统计消息的个数 do { if(remind_LengByteCnt++) { remind_Leng += (rec_Data[remind_LengLocal] & 0X7F) * 128; } else { remind_Leng += rec_Data[remind_LengLocal] & 0X7F; } }while(rec_Data[remind_LengLocal++] >> 7); //为 1 时执行循环,说明此时剩余字节第一位 为 1 publish_RecData.message_Leng[publish_RecData.message_Cnt - 1] = 1 + remind_LengByteCnt + remind_Leng; //计算当前消息长度 rec_DataLeng -= publish_RecData.message_Leng[publish_RecData.message_Cnt - 1]; //接受数据长度减去当前消息长度 rec_Data = &rec_Data[publish_RecData.message_Leng[publish_RecData.message_Cnt - 1]]; //rec_Data指向下一个消息的开头 /*********************************** 为下一次循环做准备 ****************************************/ remind_LengByteCnt = 0; remind_Leng = 0; remind_LengLocal = 1; }while(rec_DataLeng); //此段循环代码解析出了 消息数量,每个消息的长度 rec_Data = rec_DataBkp; for(i = 0; i<publish_RecData.message_Cnt; i++) { memcpy(*(publish_RecData.message + i),&rec_Data[message_Loacl],publish_RecData.message_Leng[i]); *(*(publish_RecData.message + i)+publish_RecData.message_Leng[i]) = ''; message_Loacl += publish_RecData.message_Leng[i]; } }

最后

以上就是兴奋胡萝卜最近收集整理的关于MQTT协议C语言实现-接收服务器推送消息处理编程思路简介的全部内容,更多相关MQTT协议C语言实现-接收服务器推送消息处理编程思路简介内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部