paho架构_Paho -物联网 MQTT C Cient的实现和详解

本文深入解析Paho MQTT C 客户端的同步通信实现,包括创建客户端、设置连接选项、订阅话题、发布消息、处理接收信息及断开连接的步骤。示例代码展示如何创建订阅和发布客户端,并详细解释了相关函数和结构体的用法。
摘要由CSDN通过智能技术生成

概述

在文章Paho - MQTT C Cient的实现中,我介绍了如何使用Paho开源项目创建MQTTClient_pulish客户端。但只是简单的介绍了使用方法,而且客户端的结果与之前介绍的并不吻合,今天我就结合新的例子,给大家讲解一下Paho使用MQTT客户端的主要过程。

如同前面介绍的,MQTT客户端分为同步客户端和异步客户端。今天主要讲解的是同步客户端,结构还是如同步客户端中介绍的:

1.创建一个客户端对象;

2.设置连接MQTT服务器的选项;

3.如果多线程(异步模式)操作被使用则设置回调函数(详见 Asynchronous >vs synchronous client applications);

4.订阅客户端需要接收的任意话题;

5.重复以下操作直到结束:

a.发布客户端需要的任意信息;

b.处理所有接收到的信息;

6.断开客户端连接;

7.释放客户端使用的所有内存。

实现

好,直接上代码,MQTT简单的同步客户端。

#include

#include

#include

#include

#include "MQTTClient.h"

#if !defined(WIN32)

#include

#else

#include

#endif

#define NUM_THREADS2

#define ADDRESS "tcp://localhost:1883" //更改此处地址

#define CLIENTID "aaabbbccc_pub" //更改此处客户端ID

#define SUB_CLIENTID "aaabbbccc_sub" //更改此处客户端ID

#define TOPIC "topic01" //更改发送的话题

#define PAYLOAD "Hello Man, Can you see me ?!" //

#define QOS 1

#define TIMEOUT 10000L

#define USERNAME "test_user"

#define PASSWORD"jim777"

#define DISCONNECT"out"

int CONNECT = 1;

volatile MQTTClient_deliveryToken deliveredtoken;

void delivered(void *context, MQTTClient_deliveryToken dt)

{

printf("Message with token value %d delivery confirmed\n", dt);

deliveredtoken = dt;

}

int msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message)

{

int i;

char* payloadptr;

printf("Message arrived\n");

printf(" topic: %s\n", topicName);

printf(" message: ");

payloadptr = message->payload;

if(strcmp(payloadptr, DISCONNECT) == 0){

printf(" \n out!!");

CONNECT = 0;

}

for(i=0; ipayloadlen; i++)

{

putchar(*payloadptr++);

}

printf("\n");

MQTTClient_freeMessage(&message);

MQTTClient_free(topicName);

return 1;

}

void connlost(void *context, char *cause)

{

printf("\nConnection lost\n");

printf(" cause: %s\n", cause);

}

void *subClient(void *threadid){

long tid;

tid = (long)threadid;

printf("Hello World! It's me, thread #%ld!\n", tid);

MQTTClient client;

MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;

int rc;

int ch;

MQTTClient_create(&client, ADDRESS, SUB_CLIENTID,

MQTTCLIENT_PERSISTENCE_NONE, NULL);

conn_opts.keepAliveInterval = 20;

conn_opts.cleansession = 1;

conn_opts.username = USERNAME;

conn_opts.password = PASSWORD;

MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值