当前位置: 首页 > news >正文

MQTT 订阅接收消息 mosquitto 方式

1 说明

   采用 mosquitto 库,实现订阅主题,并接收消息。其中服务器有做限制,需要对应的 cilent id ,cafile 、certfile  、keyfile 等配置

2 环境

采用ubuntu 直接编译调试
安装mosquitto 库

sudo apt install libmosquitto-dev
sudo apt-get install mosquitto

3 代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mosquitto.h>#define MQTT_HOST "akhrsh85xmt1q-ats.iot.us-east-1.amazonaws.com"
#define MQTT_PORT 8883
#define MQTT_TOPIC "test_topic/recv"
#define MQTT_CERT_PATH "/home/sky/develop/test/mosqito/cert.pem"
#define MQTT_KEY_PATH "/home/sky/develop/test/mosqito/key.pem"
#define MQTT_CA_PATH "/home/sky/develop/test/mosqito/ca.pem"
#define MQTT_CLIENT_ID "ID_666"void on_message(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message) {printf("Received message: %s\n", (char *)message->payload);
}int main() {struct mosquitto *mosq = NULL;int rc;// 初始化 mosquitto 库mosquitto_lib_init();// 创建 mosquitto 客户端实例mosq = mosquitto_new(MQTT_CLIENT_ID, true, NULL);if (!mosq) {printf("Failed to create mosquitto instance.\n");return 1;}// 设置 TLS 证书rc = mosquitto_tls_set(mosq, MQTT_CA_PATH, NULL, MQTT_CERT_PATH, MQTT_KEY_PATH, NULL);if (rc != MOSQ_ERR_SUCCESS) {printf("Failed to set TLS certificate.\n");return 1;}// 连接 MQTT 服务器rc = mosquitto_connect(mosq, MQTT_HOST, 8883, 60);if (rc != MOSQ_ERR_SUCCESS) {printf("Failed to connect to MQTT server.\n");return 1;}// 订阅主题rc = mosquitto_subscribe(mosq, NULL, MQTT_TOPIC, 0);if (rc != MOSQ_ERR_SUCCESS) {printf("Failed to subscribe to topic.\n");return 1;}// 设置消息回调函数mosquitto_message_callback_set(mosq, on_message);// 循环处理消息while (1) {rc = mosquitto_loop(mosq, -1, 1);if (rc != MOSQ_ERR_SUCCESS) {printf("Failed to process messages.\n");break;}}// 断开连接并清理资源mosquitto_disconnect(mosq);mosquitto_destroy(mosq);mosquitto_lib_cleanup();return 0;
}

对应的makefile

all: mqtt_submqtt_sub: mqtt_sub.ogcc -o mqtt_sub mqtt_sub.o -lmosquittomqtt_sub.o: mqtt_sub.cgcc -c mqtt_sub.cclean:rm -f mqtt_sub mqtt_sub.o

4 调试

4.1 编译

sky@ubuntu:~/develop/test/mosqito$ make
gcc -c mqtt_sub.c
gcc -o mqtt_sub mqtt_sub.o -lmosquitto

4.2 对应发送端的发送

此工具为 亚马逊的测试平台,可根据自己的实际情况,采用其他的测试工具或者linux下的发送命令
发送端数据

4.3 接收端

sky@ubuntu:~/develop/test/mosqito$ 
sky@ubuntu:~/develop/test/mosqito$ ./mqtt_sub
Received message: {"message": "1111"
}

相关文章:

MQTT 订阅接收消息 mosquitto 方式

1 说明 采用 mosquitto 库&#xff0c;实现订阅主题&#xff0c;并接收消息。其中服务器有做限制&#xff0c;需要对应的 cilent id &#xff0c;cafile 、certfile 、keyfile 等配置2 环境 采用ubuntu 直接编译调试 安装mosquitto 库 sudo apt install libmosquitto-dev su…...

以mod_jk方式整合apache与tomcat(动静分离)

前言&#xff1a; 为什么要整合apache和tomcat apache对静态页面的处理能力强&#xff0c;而tomcat对静态页面的处理不如apache&#xff0c;整合后有以下好处 提升对静态文件的处理性能 利用 Web 服务器来做负载均衡以及容错 更完善地去升级应用程序 jk整合方式介绍&#…...

springboot动态数据源切换

1&#xff09;、就是将多个数据源全部注入到bean中&#xff0c;根据需要实现多数据源之间的切换。 2&#xff09;、使用baomidou的DS注解。见文章DS注解实现数据源动态切换 com.baomidou dynamic-datasource-spring-boot-starter 3.5.1 ##设置默认的数据源或者数据源组,默认值…...

代码随想录训练营day14

101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 func isSymmetric(root *TreeNode) bool {if root nil{ return true}return judge(root.Left,root.Right) }func judge(lf *TreeNode , ri *TreeNode)bool{if lf nil && ri nil{ retu…...

功能测试进阶自动化测试如何摸清学习方向,少走弯路呢?

目录 抛开疑问&#xff0c;只做学术探讨 小白在想什么&#xff1f; 盖楼之前先打好地基&#xff0c;首先需要学习一门语言 语言入门后&#xff0c;正式踏上开始自动化成神之路&#xff0c;入门篇Selenium 玩腻了Selenium 开始接触自动化框架unittest/testNG 不满足于单元…...

检测前端是否可以ping通后端返回的ip地址

检测前端是否可以ping通后端返回的ip地址 前端检测是否可ping通ip地址&#xff08;PC端&#xff09;前端检测是否可ping通ip地址&#xff08;uniapp小程序端&#xff09; 前端检测是否可ping通ip地址&#xff08;PC端&#xff09; // 前端检测是否可ping通ip地址 ping…...

SMART司马他法则(目标管理)

S代表具体(Specific)&#xff0c;指绩效考核要切中特定的工作指标&#xff0c;不能笼统&#xff1b; M代表可度量(Measurable)&#xff0c;指绩效指标是数量化或者行为化的&#xff0c;验证这些绩效指标的数据或者信息是可以获得的&#xff1b; A代表可实现(Attainable)&…...

【LeetCode】删除并获得点数

删除并获得点数 题目描述算法分析编程代码空间优化 链接: 删除并获得点数 题目描述 算法分析 编程代码 class Solution { public:int deleteAndEarn(vector<int>& nums) {const int N 10001;int arr[N] {0};for(const auto& n : nums){arr[n]n;}vector<in…...

SciencePub学术 | 传感器类重点SCIE征稿中

SciencePub学术 刊源推荐: 传感器类重点SCIE征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 传感器类重点SCIE 【期刊简介】IF&#xff1a;2.0-2.5&#xff0c;JCR3区&#xff0c;中科院4区&#xff1b; 【版面类型】正刊&#xff1…...

移动端开发基础总结

移动端学习总结 (适合于复习) 移动端基础 技术选型&#xff1a; 单独制作移动端页面&#xff08;主流&#xff09; 流式布局&#xff08;百分比布局&#xff09;flex弹性布局&#xff08;强烈推荐&#xff09;lessrem媒体查询布局混合布局 响应式页面兼容移动端&#xff08;…...

小X学游泳(深搜)

第一题 题目描述 小X想要学游泳。 这天&#xff0c;小X来到了游泳池&#xff0c;发现游泳池可以用N行M列的格子来表示&#xff0c;每个格子的面积都是1&#xff0c;且格子内水深相同。 由于小X刚刚入门&#xff0c;他只能在水深相同的地方游泳。为此&#xff0c;他把整个游泳池…...

分布式协议与算法——拜占庭将军问题

拜占庭将军问题 背景&#xff1a;以战国时期为背景 战国时期&#xff0c;齐、楚、燕、韩、赵、魏、秦七雄并立&#xff0c;后来秦国的势力不断强大起来&#xff0c;成了东方六国的共同威胁。于是&#xff0c;这六个国家决定联合&#xff0c;全力抗秦&#xff0c;免得被秦国各个…...

MySQL数据库管理的基本原则和技巧

MySQL数据库是一种常用的关系型数据库管理系统&#xff0c;用于存储和管理大量的数据。在进行MySQL数据库管理时&#xff0c;有一些基本原则和技巧可以帮助我们更有效地管理数据库。 数据库设计原则&#xff1a; 合理规划数据表结构&#xff1a; 根据数据之间的关系和业务需求…...

SQL-每日一题【1193. 每月交易 I】

题目 Table: Transactions 编写一个 sql 查询来查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额。 以 任意顺序 返回结果表。 查询结果格式如下所示。 示例 1: 解题思路 1.题目要求我们查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数…...

探析青少年口才训练在个人发展中的重要性与影响

论文题目&#xff1a;探析青少年口才训练在个人发展中的重要性与影响 摘要&#xff1a; 本论文旨在探讨青少年口才训练对个人发展的重要性和影响。通过对相关文献的综述和实证研究的分析&#xff0c;论文将阐述口才训练对青少年自信心、表达能力和思维能力的提升&#xff0c;以…...

HTML 元素的 class 和 id 属性有何区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 唯一性⭐ 选择器权重⭐ JS操作⭐ CSS和JavaScript引用⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏…...

关于GKPhoto点击放大没有图片只有缺省图

GKPhoto,点进去看看,人家可传递的不止有url,还有UiImage NSString *photo self.detailModel.teacherModel.teacher_picture; NSString *placeHoldStr "ing_morentouxiang"; NSMutableArray *photos [NSMutableArray new]; GKPhoto *phot…...

建议收藏!总结了 42 种前端常用布局方案

对 CSS 布局掌握程度决定你在Web开发中的开发页面速度。随着Web技术的不断革新&#xff0c;实现各种布局的方式已经多得数不胜数了。 本篇文章总结了四十二种CSS的常见布局&#xff0c;这四十二种布局可以细分为如下几类&#xff1a; 水平居中垂直居中水平垂直居中两列布局三…...

spring AOP两种动态代理

本文开始 1.什么是动态代理&#xff1f; 动态代理&#xff1a;本来是通过直接访问目标对象的&#xff0c;但是找个代理对象替你进行访问目标对象&#xff0c;这就是动态代理过程&#xff1b; 例如&#xff1a;买饭作为目标对象&#xff0c;自己不想亲自跑腿&#xff0c;就点个…...

英语——副词

副词是指在句子中表示行为或状态特征的词,常用来修饰动词、形容词、其他副词或者句子等,表示时间、地点、方式和程度等,在句子中作状语。 第一节 副词的基本形式 一、副词的构成 1.许多副词都是由形容词变化而来。 (1)大部分副词由相应形容词直接加-ly构成。quick→q…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...