MQTT 实战_paho mqtt 3c

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

make
make install

mqtt 的架构分为客户端和服务端,服务端的作用是broker,我在实例中使用的broker是
在这个位置下载的 https://www.emqx.com/zh/downloads?product=broker
安装上,直接执行就可以
也可以在浏览器上面查看,监控相关信息
http://127.0.0.1:18083 用户名为 admin 密码 public

两段client端的代码,在example的程序中就能够找到:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<errno.h>
#include<unistd.h>
#include"MQTTClient.h"

int main(int argc,char \*\*argv)
{
    char \*address="tcp://localhost:1883";
    char \*client_id="publish\_client";
    char \*topic="mqtt\_examples";
    char buf[1024];
    const int time_out=10000;
    int  rv;
    int  QOS=1;
    MQTTClient   client;
    MQTTClient_connectOptions conn_opts=MQTTClient_connectOptions_initializer;
    MQTTClient_message publish_msg=MQTTClient_message_initializer;
    MQTTClient_deliveryToken token;

    conn_opts.keepAliveInterval=60;
    conn_opts.cleansession=1;

    MQTTClient\_create(&client,address,client_id,MQTTCLIENT_PERSISTENCE_NONE,NULL);
    if((rv=MQTTClient\_connect(client,&conn_opts))!=MQTTCLIENT_SUCCESS)
    {
    printf("MQTTClient\_connect failure:%s\n",strerror(errno));
        return 0;
    }
    publish_msg.qos=QOS;
    publish_msg.retained=0;
    while(1)
    {
        printf("enter the message you want to send\n");
        fgets(buf,sizeof(buf),stdin);
        publish_msg.payload=(void \*)buf;
        publish_msg.payloadlen=strlen(buf);
        MQTTClient\_publishMessage(client,topic,&publish_msg,&token);
        printf("waiting for %d seconds for publication of %s on topic %s for client with CLIENTID :%s\n",time_out/1000,buf,topic,client_id);
        rv=MQTTClient\_waitForCompletion(client,token,time_out);
        printf("Message with delivery token %d delivered\n",rv);
        printf("%s\n",buf);//用于测试
        sleep(3);
    }
}


编译:gcc mqtt_publish.c -o mqtt_publish -lpaho-mqtt3c -L ./MQTT/paho.mqtt.c/ -I ./MQTT/paho.mqtt.c/src/

#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
#include<errno.h>
#include"MQTTClient.h"

int main()
{
    char \*address="tcp://localhost:1883";
    char \*client_id="client\_sub";
    char \*payload="mqtt\_examples";
    int    rv,i;
    char \*ptr=NULL;
    char \*topic=NULL;
    int topic_len;
    MQTTClient client;
    MQTTClient_connectOptions conn_opts=MQTTClient_connectOptions_initializer;
    MQTTClient_deliveryToken token;
    MQTTClient_message \*receive_msg=NULL;
    conn_opts.keepAliveInterval=60;
    conn_opts.cleansession=1;

    if((rv=MQTTClient\_create(&client,address,client_id,MQTTCLIENT_PERSISTENCE_NONE,NULL))<0)
    {
        printf("MQTTClient\_create failure:%s\n",strerror(errno));
        return 0;
    }
    printf("MQTTClient\_create successfully\n");
    if((rv=MQTTClient\_connect(client,&conn_opts))!=MQTTCLIENT_SUCCESS)
    {
        printf("MQTTClient\_connect failure:%s\n",strerror(errno));
        return 0;
    }
    printf("MQTTClient\_connect successfuly\n");
    MQTTClient\_subscribe(client,payload,1);
    /\* if((rv=MQTTClient\_receive(client,&topic,&topic\_len,&receive\_msg,5000))!=MQTTCLIENT\_SUCCESS)
 { 
 printf("MQTTClient\_receive failure:%s\n",strerror(errno));
 return 0;
 } 
 printf("MQTTClient\_receive successfully\n");\*/
    //receive 函数放在外面传递信息不会改变
    while(1)
    {
        if((rv=MQTTClient\_receive(client,&topic,&topic_len,&receive_msg,100000))!=MQTTCLIENT_SUCCESS)//最后一个参数是超时时间,单位是毫秒
        {
            printf("MQTTClient\_receive failure:%s\n",strerror(errno));
            break;
        }
        printf("MQTTClient\_receive successfully\n");
        ptr=receive_msg->payload;
        printf("Topic:%s\nTopic\_len:%d\nmsg:",topic,topic_len);
        for(i=0;i<receive_msg->payloadlen;i++)
        {
            putchar(\*ptr++);
        }
        printf("\nmsg\_len:%d\nmsg\_id:%d\n",receive_msg->payloadlen,receive_msg->msgid);
        sleep(3);
    }
    printf("end\n");
    MQTTClient\_disconnect(client, 10000);
    MQTTClient\_destroy(&client);
    return 0;
}




**收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/f8b57a03b7dcdad8a88b59c82d74cbf9.png)
![img](https://img-blog.csdnimg.cn/img_convert/0b86da87bff466cbb9445e679996b07a.png)

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

**需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

757)**

**需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

**都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值