paho实现MQTTClient发布消息

编程入门 行业动态 更新时间:2024-10-25 16:30:06

paho实现MQTTClient发布<a href=https://www.elefans.com/category/jswz/34/1771421.html style=消息"/>

paho实现MQTTClient发布消息

paho实现MQTTClient发布消息

接下来会用paho开源的一个项目,实现mqtt客户端发布消息,此文主要参考MQTT Client library for C,Paho给出的创建一个客户端有如下类似的步骤:

1、安装
//从github上下载项目
git clone .mqtt.c.git
//进入文件夹
cd paho.mqtt.c
//编译
make
//安装
sudo make install
2、目录介绍

src:源文件、库文件目录
build:编译过后的动态库及执行文件
2.1、src目录

src中有许多源文件,有发布、订阅、同步、异步文件。

2.2、build目录

build文件是编译过后的执行文件,也是同步、异步、发布、订阅消息等功能

3、实现过程
  1.创建一个客户端对象;2.设置连接MQTT服务器的选项;3.如果多线程(异步模式)操作被使用则设置回调函数(详见 Asynchronous >vs synchronous client applications);4.订阅客户端需要接收的任意话题;5.重复以下操作直到结束:a.发布客户端需要的任意信息;b.处理所有接收到的信息;6.断开客户端连接;7.释放客户端使用的所有内存。
4、文件操作

我们直接使用paho自带文件,首先修改src中MQTTClient_publish.c源代码。

4.1、修改信息
//mqtt服务器地址
#define ADDRESS “tcp://m2m.eclipse:1883”
//客户端号
#define CLIENTID “ExampleClientPub”
//主题
#define TOPIC “MQTT Examples”
//消息
#define PAYLOAD “Hello World!”
4.2、添加信息

需要添加服务器中用户名和密码

 char *username= "test"; //添加的用户名char *password = "test"; //添加的密码

将其写入客户端选项

 conn_opts.username = username; //将用户名写入连接选项中conn_opts.password = password; //将密码写入连接选项中
5、源码

源码我做了详尽的解释,其中有许多函数需要自己去上面文件自己查看,下面这是同步发布,不是异步,异步的代码也有,大家可以去看上面的网站

/******************************************************************************** Copyright (c) 2012, 2020 IBM Corp.** All rights reserved. This program and the accompanying materials* are made available under the terms of the Eclipse Public License v2.0* and Eclipse Distribution License v1.0 which accompany this distribution. ** The Eclipse Public License is available at *   .0/* and the Eclipse Distribution License is available at *   .php.** Contributors:*    Ian Craggs - initial contribution*******************************************************************************/#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "MQTTClient.h"#define ADDRESS     "59.110.42.24:1883"
#define CLIENTID    "0bd981c5-a055-4196-8b7f-efb9f7a4d6ac"
#define TOPIC       "test"
#define PAYLOAD     "Hello World!"
#define QOS         1
#define TIMEOUT     10000Lint main(int argc, char* argv[])
{//声明mqtt客户端MQTTClient client;//初始化客户端选项 conn_optsMQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;//消息初始化 pubmsgMQTTClient_message pubmsg = MQTTClient_message_initializer;MQTTClient_deliveryToken token;int rc;char *username = "test";char *password = "test";if ((rc = MQTTClient_create(&client, ADDRESS, CLIENTID,MQTTCLIENT_PERSISTENCE_NONE, NULL)) != MQTTCLIENT_SUCCESS){printf("Failed to create client, return code %d\n", rc);exit(EXIT_FAILURE);}//保持心跳20conn_opts.keepAliveInterval = 20;//清理会话conn_opts.cleansession = 1;//客户端的用户名和密码conn_opts.username = username;conn_opts.password = password;//创建连接if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS){printf("Failed to connect, return code %d\n", rc);exit(EXIT_FAILURE);}//消息负载(内容)pubmsg.payload = PAYLOAD;//消息长度pubmsg.payloadlen = (int)strlen(PAYLOAD);//消息质量分为0:不重要的消息比如温度,可以多次上传丢失一次没事。1:可能会丢失1次 2:永远不会丢失pubmsg.qos = QOS;//有true和false 判断消息是否保留pubmsg.retained = 0;//发布消息 token是消息发布后,传递令牌将返回客户端检查令牌是否已成功传递到其目的地if ((rc = MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token)) != MQTTCLIENT_SUCCESS){printf("Failed to publish message, return code %d\n", rc);exit(EXIT_FAILURE);}printf("Waiting for up to %d seconds for publication of %s\n""on topic %s for client with ClientID: %s\n",(int)(TIMEOUT/1000), PAYLOAD, TOPIC, CLIENTID);//阻塞函数,等待消息发布rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);printf("Message with delivery token %d delivered\n", token);if ((rc = MQTTClient_disconnect(client, 10000)) != MQTTCLIENT_SUCCESS)printf("Failed to disconnect, return code %d\n", rc);//断开连接MQTTClient_destroy(&client);return rc;
}
6、实现效果

服务器中发布

mqtt测试软件订阅的消息就能接受到

更多推荐

paho实现MQTTClient发布消息

本文发布于:2024-02-27 04:10:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1705128.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:消息   paho   MQTTClient

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!