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

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

https://www.cnblogs.com/homejim/p/8196763.htmljavascript

概述

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

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

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

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

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

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

5.重复如下操做直到结束:

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

b.处理全部接收到的信息;

6.断开客户端链接;

7.释放客户端使用的全部内存。java

实现

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

#include

#include #include #include #include "MQTTClient.h" #if !defined(WIN32) #include #else #include #endif #define NUM_THREADS 2 #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); if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { printf("Failed to connect, return code %d\n", rc); exit(EXIT_FAILURE); } printf("Subscribing t

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值