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

news2024/11/24 22:35:00

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_publisher

mqtt_publisher: mqtt_publisher.o
	gcc -o mqtt_publisher mqtt_publisher.o -lmosquitto

mqtt_publisher.o: mqtt_publisher.c
	gcc -c mqtt_publisher.c

clean:
	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.coloradmin.cn/o/857028.html

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

相关文章

Nginx虚拟主机和日志详解

目录 1.Nginx虚拟主机1.1基于IP虚拟主机1.2基于端口虚拟主机1.3基于域名实现的虚拟主机 2.日志详解 1.Nginx虚拟主机 虚拟主机&#xff0c;Nginx配置中的多个server{}区域对应不同的业务(站点) 虚拟主机方式基于域名的虚拟主机不同的域名访问不同的站点基于IP的虚拟主机不同的…

跨境电商线上店铺智能装修系统源码开发

搭建一个跨境电商线上店铺智能装修系统源码开发需要以下步骤&#xff1a; 1. 确定需求&#xff1a;首先&#xff0c;需要明确线上店铺智能装修系统的具体需求。 2. 选择开发语言和框架&#xff1a;根据需求&#xff0c;选择合适的开发语言和框架进行开发&#xff0c;可以提高…

选读SQL经典实例笔记21_字符串处理

1. SQL 并不专门用于处理复杂的字符串 1.1. 需要有逐字遍历字符串的能力。但是&#xff0c;使用SQL 进行这样的操作并不容易 1.2. SQL 没有Loop循环功能 1.2.1. Oracle的MODEL子句除外 2. 遍历字符串 2.1. 把EMP表的ENAME等于KING的字符串拆开来显示为4行&#xff0c;每行…

提速计算机运行速度方法

提速计算机运行速度方法 1&#xff0c;首先看这一步情况运行负载是否很高&#xff0c;很高就容易产生迟钝&#xff01;2&#xff0c;安装一个清理电脑空间的软件&#xff0c;深度清理的。3&#xff0c;点击这里&#xff0c;看开机自启动的软件有哪些&#xff0c;如下图所示。4&…

CEC2013(MATLAB):淘金优化算法GRO求解CEC2013的28个函数

一、淘金优化算法GRO 淘金优化算法&#xff08;Gold rush optimizer&#xff0c;GRO&#xff09;由Kamran Zolf于2023年提出&#xff0c;其灵感来自淘金热&#xff0c;模拟淘金者进行黄金勘探行为。淘金优化算法&#xff08;Gold rush optimizer&#xff0c;GRO&#xff09;提…

logstash日志换行处理小解

logstash主用于日志实时数据收集、解析&#xff0c;并将数据转发的工具&#xff0c;内置的功能也相当强大。但&#xff0c;同时意味着&#xff0c;他可能接收到各种情况的数据。 此处&#xff0c;我们主要讲解我实际使用中&#xff0c;碰到的一个小问题&#xff0c;换行(\n)。…

斗轮机与程控站之间开关量双向无线通讯

斗轮堆取料机是一种对散料进行连续堆取作业的高效装卸大型机械,被广泛使用于火力发电厂和炼焦厂的输煤系统中。目前对斗轮机的技改主要为将斗轮机的部分程控信号改为无线传输&#xff0c;取代卷筒电机和电缆的应用。 多数情况下都是利用无线通讯做媒介&#xff0c;让工作人员通…

display 属性有哪些值,分别表示什么意思

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ display 属性是什么&#xff1f;⭐ display 属性有哪些值&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&…

C# PDF加盖电子章

winform界面 1.选择加签pdf按钮代码实现 private void button1_Click(object sender, EventArgs e){OpenFileDialog op = new OpenFileDialog();op.Filter = "PDF文件(*.pdf)|*.pdf";bool flag = op.ShowDialog() == DialogResult.OK;if (flag){string pdfPath = P…

springboot+activiti+vue+mysql轻松搞定审批!

前言 目前市场上有很多开源平台没有整合工作流&#xff0c;即使有&#xff0c;也是价格不菲的商业版&#xff0c;来看这篇文章的估计也了解了行情&#xff0c;肯定不便宜。我这个快速开发平台在系统基础功能&#xff08;用户管理&#xff0c;部门管理…&#xff09;上整合了工…

HTTP代理编程:Python实用技巧与代码实例

今天我要与大家分享一些关于HTTP代理编程的实用技巧和Python代码实例。作为一名HTTP代理产品供应商&#xff0c;希望通过这篇文章&#xff0c;帮助你们掌握一些高效且实用的编程技巧&#xff0c;提高开发和使用HTTP代理产品的能力。 一、使用Python的requests库发送HTTP请求&a…

无涯教程-Perl - getpwnam函数

描述 此函数基于EXPR指定的用户名,从/etc/passwd文件提取的列表context中返回字段列表。通常这样使用- ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) getpwnam($user); 在标量context中,返回数字用户ID。如果尝试访问整个/etc/passwd文件,则应使用getpwent…

【从零学习python 】10.Python条件语句和if嵌套详解

文章目录 elif一、 elif的功能二、注意点if嵌套想一想&#xff1a; 一、if嵌套的格式二、if嵌套的应用为什么结果3和结果4相同&#xff1f;&#xff1f;&#xff1f; 猜拳游戏运行效果:参考代码: if补充内容三、自动类型转换进阶案例 elif 如果有这样一种情况&#xff1a;当条件…

nginx(八十六)uri转义杂谈

一 关于nginx uri过往整理 HTTP1.1(四)URI HTTP1.1(五)URI编码 HTTP杂谈(三)URL特殊字符 以下涉及&#xff1a; 1) location 与$uri --> 路由匹配 --> 通过debug日志观察2) proxy_paas --> attach_url是否有,有是否是变量,决定透传给上游uri的形式3) $reque…

PDF能转CAD格式吗?学会这种方法轻松实现转换

PDF文件可以转换成CAD格式吗&#xff1f;答案是可以的&#xff0c;PDF格式在各种设备和软件上都有很好的兼容性&#xff0c;而CAD格式则是更加专业的CAD软件设计&#xff0c;将PDF转换为CAD格式可以确保在设计过程中不会出现无法编辑的现象&#xff0c;极大的提高工作效率&…

arcgis pro 3.0.2 安装及 geemap

arcgis pro 3.0.2 安装及 geemap arcgis pro 3.0.2 安装 arcgis pro 3 版本已经很多了&#xff0c;在网上找到资源就可以进行安装 需要注意的是&#xff1a;有的文件破解文件缺少&#xff0c;导致破解不成功。 能够新建地图就是成功了&#xff01; geemap安装 1.需要进行环…

mac安装redis 配置密码

brew install redis 两个重要目录文件 /opt/homebrew/opt/redis/bin/redis-server /opt/homebrew/etc/redis.conf 配置文件默认是非守护进程运行redis 默认是不用密码验证&#xff0c;配置为开启密码验证 重启redis brew services restart redis 客户端调用 redis-cli 密码 …

浅谈绿色节约型校园电力能耗监控系统的设计与应用方案

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘 要&#xff1a;校园中能源的消耗与浪费占用了校园总费用支出的很大比例&#xff0c;而电能的消耗又是能源消耗的重中之重&#xff0c;重点阐述了校园能耗监控系统方案设计、关键技术。以北方某高校为例应用该方案&#x…

find命令用法及参数

find 命令是在 Linux 和 Unix 系统中用于查找文件的强大工具。它可以递归地在指定的目录和子目录中搜索符合条件的文件&#xff0c;并执行一些操作。 以下是 find 命令的一些常见用法和参数&#xff1a; 基本用法 查找指定名称的文件&#xff1a; find /path/to/directory …

最新SQLMap进阶技术

点击星标&#xff0c;即时接收最新推文 本文选自《web安全攻防渗透测试实战指南&#xff08;第2版&#xff09;》 五折购买链接&#xff1a;u.jd.com/3ibjeF6 SQLMap进阶&#xff1a;参数讲解 &#xff08;1&#xff09;--level 5&#xff1a;探测等级。 参数“--level 5”指需…