Linux C 语言 mosquitto 方式 MQTT 发布消息

1 说明

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

2 开发环境

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

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

3 参考代码

每隔2秒发布一次消息, 代码存为文件mqtt_publisher.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <mosquitto.h>#define MQTT_HOST "akhrsh85xmt1q-ats.iot.us-east-1.amazonaws.com"
#define MQTT_PORT 8883
#define MQTT_TOPIC "aws/rules/funcResponse_v1_1/WoSweeperOrigin/1A2023040002/funcResponse"
#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"int main(int argc, char *argv[])
{struct mosquitto *mosq = NULL;int rc = 0;int i = 0;// 初始化 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, MQTT_PORT, 60);if (rc != MOSQ_ERR_SUCCESS) {printf("Failed to connect to MQTT server.\n");return 1;}for(i = 0; i < 10; i++){char message[50];sprintf(message, "Message %d", i+1);printf("%s %s %d [%d/10], send message:%s\n", __FILE__, __func__, __LINE__, i, message);rc = mosquitto_publish(mosq, NULL, MQTT_TOPIC, strlen(message), message, 0, false);if(rc != MOSQ_ERR_SUCCESS){fprintf(stderr, "Error: Could not publish message. %s\n", mosquitto_strerror(rc));}rc = mosquitto_loop(mosq, -1, 1);if (rc != MOSQ_ERR_SUCCESS) {printf("Failed to process messages.\n");break;}sleep(2);}mosquitto_disconnect(mosq);mosquitto_destroy(mosq);mosquitto_lib_cleanup();return 0;
}

对应的makefile

all: mqtt_publishermqtt_publisher: mqtt_publisher.ogcc -o mqtt_publisher mqtt_publisher.o -lmosquittomqtt_publisher.o: mqtt_publisher.cgcc -c mqtt_publisher.cclean:rm -f mqtt_publisher mqtt_publisher.o

4 调试

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

运行

sky@ubuntu:~/develop/test/mosqito$ ./mqtt_publisher 
mqtt_publisher.c main 49 [0/10], send message:Message 1
mqtt_publisher.c main 49 [1/10], send message:Message 2
mqtt_publisher.c main 49 [2/10], send message:Message 3
mqtt_publisher.c main 49 [3/10], send message:Message 4
mqtt_publisher.c main 49 [4/10], send message:Message 5
mqtt_publisher.c main 49 [5/10], send message:Message 6
mqtt_publisher.c main 49 [6/10], send message:Message 7

网页端查看
在这里插入图片描述

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

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

相关文章

如何通过ChatGPT优化简历帮助自己找到合适的工作

​ 通过对1000多名当前和最近的求职者进行调查发现&#xff0c;46%的人表示使用ChatGPT来撰写简历或求职信或两者兼而有之。其中大约70%确实得到了雇主更高的回应率&#xff1b;59%被录用。 2023年1月&#xff0c;三名麻省理工学院教授进行的一项研究发现&#xff0c;使用“…

PoseiSwap 开启“Poseidon”池,治理体系或将全面开启

PoseiSwap 曾在前不久分别以 IDO、IEO 的方式推出了 POSE 通证&#xff0c;但 PoseiSwap DEX 中并未向除 Zepoch 节点外的角色开放 POSE 资产的交易。而在前不久&#xff0c;PoseiSwap 推出了全新的“Poseidon”池&#xff0c;该池将向所有用户开放&#xff0c;并允许用户自由的…

Springboot中创建拦截器

目录 目的 实现过程 1、创建拦截器 2、注册拦截器 完整代码 目的 在Springboot项目中创建拦截器&#xff0c;在进入Controller层之前拦截请求&#xff0c;可对拦截到的请求内容做响应处理&#xff0c;如&#xff1a;校验请求参数、验证证书等操作&#xff1b; 实现过程 1、创…

Effective Java笔记(29)优先考虑泛型

一般来说 &#xff0c;将集合声 明参数化&#xff0c;以及使用 JDK 所提供的泛型方法&#xff0c;这些都不太困难 。编写自己的泛型会比较困难一些&#xff0c;但是值得花些时间去学习如何编写 。 以简单的&#xff08;玩具&#xff09;堆校实现为例 &#xff1a; // Object -…

诚迈科技亮相华为开发者大会2023,打造万物互联全场景生态

8月4-6日&#xff0c;华为开发者大会2023在中国松山湖盛大举行&#xff0c;诚迈科技作为华为合作伙伴携一系列基于OpenHarmony和HarmonyOS Connect的创新技术及生态成果&#xff0c;精彩亮相OpenHarmony共建展区、OpenHarmony使能展区和鸿蒙智联展区&#xff0c;吸引了众多行业…

使用Python和wxPython构建中文OCR截图工具

引言&#xff1a; 随着数字化时代的到来&#xff0c;我们经常需要从图像中提取文本信息。而在处理中文文本时&#xff0c;OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术发挥着重要作用。本文将介绍如何使用Python编程语言和wxPython图…

记录线上一次mysql只能查询,不能插入或更新的bug

错误复现 突然有一天产品通知xx服务不可用&#xff0c;想着最近也没有服务更新&#xff0c;就先排查一下服务日志 使用postman测试的时候请求明显超时&#xff0c;查看日志显示是一个锁的问题 使用工具连接到mysql&#xff0c;查看information_schema.INNODB_TRX,发现有一个事…

CVE漏洞复现-CVE-2021-3493 Linux 提权内核漏洞

CVE-2021-3493 Linux 提权内核漏洞 漏洞描述 CVE-2021-3493 用户漏洞是 Linux 内核中没有文件系统中的 layfs 中的 Ubuntu over 特定问题&#xff0c;在 Ubuntu 中正确验证有关名称空间文件系统的应用程序。buntu 内核代码允许低权限用户在使用 unshare() 函数创建的用户命名…

【linux-keepalive】keepalive避免单点故障,高可用配置

keepalive: [rootproxy ~]# yum install -y keepalived [rootproxy ~]# vim /etc/keepalived/keepalived.conf global_defs {router_id proxy1 //设置路由ID号vrrp_iptables //不添加任何防火墙规则 } vrrp_instance V…

python的virtualenv虚拟环境无法激活activate

目录 问题描述&#xff1a; 解决办法&#xff1a; 解决结果&#xff1a; 问题描述&#xff1a; PS D:\pythonProject\pythonProject\DisplayToolLibs\venv\Scripts> .\activate .\activate : 无法加载文件 D:\pythonProject\pythonProject\DisplayToolLibs\venv\Scripts\…

sql注入漏洞

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 原因危害如何挖寻找注入点测试是否有绕过实质分类sqli靶场盲注时间盲注别人的总结UA注入referer注入DNSlog外带cookie注入宽字节注入堆叠注入sqlmap工具getshellacc…

CUDA版本自由切换

下载特定版本cuda 在英伟达官网下载相关驱动 https://developer.nvidia.com/cuda-toolkit-archive 然后点点点&#xff0c;选择runfile(local) 本地运行后先continue Do you accept the previously read EULA? accept/decline/quit: accept按回车取消驱动安装 gcc版本不…