基于C++在windows下使用mosquitto实现MQTT订阅客户端

news/2026/1/20 16:18:24/文章来源:https://www.cnblogs.com/missyou0813/p/19507342

1、MOSQUITTO订阅客户端搭建

  1 #include <iostream>
  2 #include <iostream>
  3 #include <thread>
  4 #include <mosquitto.h>
  5 
  6 //mqtt
  7 #define MQTT_USER_NAME "admin"
  8 #define MQTT_PASS_WORD "123456"
  9 #define MQTT_SERVER_IP_ADDRESS "10.57.6.250"
 10 #define MQTT_SERVER_PORT 1883
 11 #define PUBLISH_JSON_DATA_ORG "4321"
 12 static struct mosquitto* mosq;
 13 static bool mqtt_init_sign;
 14 //mqtt
 15 
 16 void on_message(struct mosquitto* mosq, void* userdata, const struct mosquitto_message* msg) {
 17     std::cout << "\nrev msg:" << std::endl;
 18     std::cout << "the topic of the msg is: " << msg->topic << std::endl;
 19 
 20     if (msg->payloadlen > 0) {
 21         std::string message(static_cast<char*>(msg->payload), msg->payloadlen);
 22         std::cout << "the msg content is: " << message.c_str() << std::endl;
 23     }
 24     else {
 25         std::cout << "the msg content is:null" << std::endl;
 26     }
 27 
 28     std::cout << "QoS: " << msg->qos << std::endl;
 29     std::cout << "the ID of the msg is: " << msg->mid << std::endl;
 30     std::cout << "---------------------" << std::endl;
 31 }
 32 
 33 void on_connect(struct mosquitto *mosq, void *obj, int rc) {
 34     if (rc == 0) {
 35         printf("authentication success\n");
 36     }
 37     else {
 38         printf("connect failed: %s\n", mosquitto_strerror(rc));
 39     }
 40 }
 41 
 42 void on_disconnect(struct mosquitto *mosq, void *obj, int rc) {
 43     printf("disconnect: %s\n", mosquitto_strerror(rc));
 44 
 45     if (rc == MOSQ_ERR_AUTH) {
 46         printf("error:authentication failure(username/password is wrong)\n");
 47     }
 48     else if (rc == MOSQ_ERR_CONN_REFUSED) {
 49         printf("error:access refused\n");
 50     }
 51 }
 52 
 53 int init_mqtt(const std::string username, const std::string passwd, const std::string hostname, const int port)
 54 {
 55     mosquitto_lib_init();
 56 
 57     mosq = mosquitto_new(nullptr, true, nullptr);//第一个形参制定为一个值后,派生类会出现发布数据失败的情况,因为不同的派生类共用一个client_id
 58     if (!mosq) {
 59         std::cerr << "Failed to create mosquitto instance!" << std::endl;
 60         return 0;
 61     }
 62 
 63     mosquitto_connect_callback_set(mosq, on_connect);
 64     mosquitto_disconnect_callback_set(mosq, on_disconnect);
 65     mosquitto_message_callback_set(mosq, on_message);
 66 
 67     const char* usrname = username.c_str();
 68     const char* password = passwd.c_str();
 69 
 70     int rc = mosquitto_username_pw_set(mosq, usrname, password);
 71     if (rc != MOSQ_ERR_SUCCESS) {
 72         std::cerr << "Failed to set username/password: " << mosquitto_strerror(rc) << std::endl;
 73         mosquitto_destroy(mosq);
 74         mosquitto_lib_cleanup();
 75         return 0;
 76     }
 77 
 78     rc = mosquitto_connect(mosq, hostname.c_str(), port, 60);
 79     if (rc != MOSQ_ERR_SUCCESS) {
 80         std::cerr << "Connection failed: " << mosquitto_strerror(rc) << std::endl;
 81 
 82         std::cout << "Trying without authentication..." << std::endl;
 83         mosquitto_username_pw_set(mosq, nullptr, nullptr);
 84 
 85         rc = mosquitto_connect(mosq, hostname.c_str(), port, 60);
 86         if (rc != MOSQ_ERR_SUCCESS) {
 87             std::cerr << "Still failed: " << mosquitto_strerror(rc) << std::endl;
 88             mosquitto_destroy(mosq);
 89             mosquitto_lib_cleanup();
 90             return 0;
 91         }
 92     }
 93 
 94     mosquitto_loop_start(mosq);
 95     mqtt_init_sign = true;
 96     return 1;
 97 }
 98 
 99 void subscribe_msg_from_server()
100 {
101     const char* topic = "TestMqttTopic";
102     int qos = 1;  // 服务质量等级 0,1,2
103 
104     int result = mosquitto_subscribe(mosq, NULL, topic, qos);
105     if (result != MOSQ_ERR_SUCCESS) {
106         std::cerr << "订阅失败: " << mosquitto_strerror(result) << std::endl;
107     }
108     else {
109         std::cout << "已订阅主题: " << topic << std::endl;
110     }
111 }
112 
113 int main()
114 {
115     init_mqtt(MQTT_USER_NAME, MQTT_PASS_WORD, MQTT_SERVER_IP_ADDRESS, MQTT_SERVER_PORT);
116 
117     while (1)
118     {
119         std::this_thread::sleep_for(std::chrono::milliseconds(5000));
120         std::cout << "start subscribe!" << std::endl;
121         subscribe_msg_from_server();
122     }
123 }

2、效果展示

MqttSub

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1189739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java就业越来越难,普通程序员如何突围上岸!

很多人都说今年对于IT行业根本没有所谓的“金三银四”“金九银十”。在各大招聘网站或者软件上不管是大厂还是中小公司大多都是挂个招聘需求&#xff0c;实际并不招人&#xff1b;在行业内的程序员基本都已经感受到了“寒气”。虽然事实确实是如此&#xff0c;但你细心观察之后…

2025中小企业低代码设备选型参考:斑斑(免费私有化)与飞书多维(生态协同)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2026年重庆CAAC无人机培训机构推荐榜:无人机专业培训 /无人机培训/ 无人机培训机构/ 无人机培训学校/蓝天飞扬无人机培训机构精选

在低空经济快速发展的背景下,无人机应用场景已覆盖农业植保、物流配送、测绘巡检等12大领域,对专业飞行人才的需求量以年均35%的速度增长。作为低空通用航空领域的创新服务企业,重庆新锐通用航空服务有限公司(以下…

福州研究生留学中介哪家强?口碑排名揭秘申请成功率高的优质机构 - 留学机构评审官

福州研究生留学中介哪家强?口碑排名揭秘申请成功率高的优质机构一、福州研究生如何寻找靠谱的留学中介?在2026年1月9日的今天,许多福州高校的学子在规划研究生留学时,常感到迷茫:市面上中介机构众多,宣传眼花缭乱…

[吾爱大神原创工具] 一个开源、轻量、完全离线、跨平台的电脑工具箱

[吾爱大神原创工具] 一个开源、轻量、完全离线、跨平台的电脑工具箱 链接&#xff1a;https://pan.xunlei.com/s/VOjPQwqys89sHBb4b6cHQISZA1?pwd8vef# 你可能经常需要这些"小工具"&#xff1a;哈希、加解密、编码、JSON 格式化、二维码、简单古典密码…… TroveK…

智能驱动业务增长:2025年8大CRM系统选型全景指南 - 毛毛鱼的夏天

随着生成式 AI 技术的规模化落地与企业数字化进入深水区,CRM 系统已完成从 “客户信息管理工具” 到 “全链路业务中枢” 的跃迁。基于技术前瞻性、行业适配度、用户实践反馈及总拥有成本(TCO)四大维度,本文精选 8…

网络安全自学:从入门到精通的路线图

网络安全自学&#xff1a;从入门到精通的路线图 新年新气象&#xff0c;祝大家新年快乐&#xff01; 一年之计在于春。正所谓“起步冲刺&#xff0c;决胜全年”&#xff0c;本篇讲解一下如何进行网络安全学习&#xff0c;供大家参考。学习是一项需要耐心和恒心的任务&#xf…

[Windows] 3D圆球效果,年会抽奖神器

[Windows] 3D圆球效果,年会抽奖神器 链接&#xff1a;https://pan.xunlei.com/s/VOjPSqhhs70LAEMuRqVSC6JQA1?pwd534c# Github开源年会抽奖神器&#xff01;3D圆球效果不要太酷炫了&#xff0c;抽奖、点名系统&#xff0c;支持自定义配置log-lottery

2026年站桩养生功权威推荐榜:什么是站桩 /赵冀龙站桩/ 太极站桩/ 站桩好处/ 站桩养生/意拳站桩机构精选

站桩作为中国传统内家功夫的核心功法,近年来因其在养生、健身、身心疗愈领域的显著效果,逐渐成为大众关注的健康方式。据行业数据显示,2025年全国站桩练习者已突破800万人,其中通过专业平台系统学习的用户占比达62…

2026年解读:2025园区招商新趋势及实战指南,办公场地/园区/企业独栋,园区招商出租推荐排行 - 品牌推荐师

随着宏观经济进入高质量发展新阶段,产业园区作为区域经济发展的重要载体,其招商逻辑与运营模式正经历深刻变革。2025年,园区招商已从单纯提供物理空间的“房东”模式,全面转向以产业生态构建、全链条服务赋能为核心…

大厂裁员Java坑少人多,普通码农如何破局?

最近几年可以说对程序员都是极不友好的&#xff0c;像之前行情好的时候金三银四&#xff0c;金九银十都是程序员跳槽涨薪的黄金期&#xff0c;是很多程序员集体往大厂冲刺的时间段&#xff1b;但由于各大厂纷纷裁员&#xff0c;整得整个互联网行业人心惶惶&#xff0c;纷纷质疑…

别再只盯着开发和算法了!这5个方向(含网安)需求大涨,越老越吃香

建议收藏&#xff1a;网络安全从入门到精通&#xff1a;计算机专业就业方向全解析院长独家建议 文章详细分析了计算机专业五大就业方向&#xff0c;特别强调了网络安全领域的人才缺口大、薪资竞争力强和政策驱动需求增长等特点。作者建议从兴趣性格、技能匹配、行业趋势和工作…

2026年口碑好的南京取名,宝宝取名,取名大师采购优选名录 - 品牌鉴赏师

引言在当今社会,取名已不仅仅是赋予一个简单的符号,它承载着家族期望、个人愿景与企业精神等多重意义。无论是给宝宝取名、个人改名,还是为公司命名,合适的名字都至关重要。然而,面对众多的取名大师和服务,如何选…

Redis学到什么程度能在在Java面试中吊打大厂面试官!

Redis这玩意不用多说&#xff0c;Java后端打工人就没有没接触过的&#xff0c;现在出去面试基本上是必问项&#xff1b;而且在工作中在项目中还能起很大的作用。它不仅能减少数据库的操作、并且你还可以利用redis的一些数据结构如set sorted set 解决一些特定的问题、利用单线程…

2026盘点海外名义雇主EOR公司,深度测评企业服务优势与合规出海路径 - 品牌2025

在全球化加速推进的背景下,越来越多中国企业正积极拓展海外市场,寻求新的增长极。然而,跨国用工的复杂性成为出海过程中的主要障碍:各国劳动法差异巨大、税务合规要求严苛、社保福利体系各异,加上在当地设立实体成…

2026年全球EOR服务商深度盘点与选择指南 - 品牌2025

中国企业出海的步伐正在加速,跨境雇佣已成为企业全球化战略的关键一环。在未设立法律实体的海外市场,如何合规、高效地组建团队成为许多企业面临的共同挑战。 Safeguard Global这类名义雇主服务商,正通过覆盖全球的…

2026出海德国合规雇佣全指南:Safeguard Global名义雇主EOR助力本地合规雇佣 - 品牌2025

对于计划进军德国市场的中国企业而言,快速组建本地团队是业务拓展的关键一步。然而,德国以严谨完善的劳动法律体系、高标准的雇员权益保护和复杂的税务社保制度著称,构成了显著的进入门槛。企业若在当地没有注册实体…

SpringBoot完整知识体系梳理,这份笔记还是太全面了!

Spring Boot不用多说&#xff0c;是咱们Java程序员必须熟练掌握的基本技能。工作上它让配置、代码编写、部署和监控都更简单&#xff0c;面试时互联网企业招聘对于Spring Boot这个系统开发的首选框架也是考察的比较严苛&#xff0c;如果你不是刚入行&#xff0c;只是停留在会用…

vllm调参执行顺序最佳实践

目录一、先给结论:推荐的生产级调优顺序(修正版)✅ 推荐顺序(你可以直接照这个跑)Step 1:确定业务级 max-model-len(你这一步是对的)Step 2:单参数扫 max-num-batched-tokens(不是 seq)为什么优先 batch_to…

2026年北京沙盘模型制作公司实力推荐:地貌沙盘模型 /地产销售沙盘/ 智能交通沙盘 /城市智能沙盘/ 仿真模型沙盘 /工业沙盘模型服务机构精选

在数字技术与实体展示深度融合的今天,沙盘模型已远非静态的微缩景观。它作为规划设计的预演蓝本、成果汇报的核心载体、招商引资的关键道具及科普展示的沉浸窗口,正以集成声、光、电、智能交互的复合形态,深刻影响着…