mosquitto(windows)作为broker,paho作为client

环境: client :ubuntu

broker:windows 32bit

下载mosquitto 的exe版本,直接安装运行,如果不过,请自行上网搜索安装过程以及解决办法;

本文主要讲解paho的demo过程,而且还是参考其他人的博客,博客地址:https://blog.youkuaiyun.com/qingdujun/article/details/71055759#mqtt-c-client%E5%AE%9E%E6%88%98

1.首先现在paho的C版本,在github上搜索即可,或者https://github.com/eclipse/paho.mqtt.c,打开源码可以看到里面包含了makefile,所以我没有使用cmake,直接make;可以看到在当前路径下多处了一个build的文件夹,进去可以看到里面有好几个动态库文件。这几个就是我们需要的库文件,(原生的哦,没有裁剪的)。


2.新建demo文件夹(用来实现例子,随便什么地方存放都行),在demo下新建lib、src、include文件夹,将paho源码中的src文件夹中的MQTTClient.h 、 MQTTClientPersistence.h拷贝到include文件夹下,将源码中build文件夹下libpaho-mqtt3c.so.1拷贝到lib下,新建软链接ln -sf libpaho-mqtt3c.so.1.0 libpaho-mqtt3c.so.1         ln -sf libpaho-mqtt3c.so.1 libpaho-mqtt3c.so

3.参考上边大神的博客,直接用几个函数搞定:

同步pub的:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "MQTTClient.h"
#define ADDRESS     "tcp://192.168.1.103:1883"
#define CLIENTID    "ExampleClientPub"
#define TOPIC       "MQTT Examples"
#define PAYLOAD     "Hello World!"
#define QOS         1
#define TIMEOUT     10000L
int main(int argc, char* argv[])
{
    MQTTClient client;
    MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
    MQTTClient_message pubmsg = MQTTClient_message_initializer;
    MQTTClient_deliveryToken token;
    int rc;
    MQTTClient_create(&client, ADDRESS, CLIENTID,
        MQTTCLIENT_PERSISTENCE_NONE, NULL);
    conn_opts.keepAliveInterval = 20;
    conn_opts.cleansession = 1;
    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 = strlen(PAYLOAD);
    pubmsg.qos = QOS;
    pubmsg.retained = 0;
    MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);
    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);
    MQTTClient_disconnect(client, 10000);
    MQTTClient_destroy(&client);
    return rc;
}

异步sub:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "MQTTClient.h"
#define ADDRESS     "tcp://192.168.1.103:1883"
#define CLIENTID    "ExampleClientSub"
#define TOPIC       "MQTT Examples"
#define PAYLOAD     "Hello World!"
#define QOS         1
#define TIMEOUT     10000L
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;
    for(i=0; i<message->payloadlen; i++)
    {
        putchar(*payloadptr++);
    }
    putchar('\n');
    MQTTClient_freeMessage(&message);
    MQTTClient_free(topicName);
    return 1;
}
void connlost(void *context, char *cause)
{
    printf("\nConnection lost\n");
    printf("     cause: %s\n", cause);
}
int main(int argc, char* argv[])
{
    MQTTClient client;
    MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
    int rc;
    int ch;
    MQTTClient_create(&client, ADDRESS, CLIENTID,
        MQTTCLIENT_PERSISTENCE_NONE, NULL);
    conn_opts.keepAliveInterval = 20;
    conn_opts.cleansession = 1;
    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 to topic %s\nfor client %s using QoS%d\n\n"
           "Press Q<Enter> to quit\n\n", TOPIC, CLIENTID, QOS);
    MQTTClient_subscribe(client, TOPIC, QOS);
    do 
    {
        ch = getchar();
    } while(ch!='Q' && ch != 'q');
    MQTTClient_disconnect(client, 10000);
    MQTTClient_destroy(&client);
    return rc;
}

makefile:


CC :=gcc
SRC :=./src/sub.c 
FLAG := -I./include -L./lib
LDFLAGS :=  -lpaho-mqtt3c
all:
	${CC}   ${FLAG}  ${SRC}  -g  -o   sub   ${LDFLAGS}  
.PYTHON:clean
clean:
	-rm -rf demo1  *.o
	

开启windows上的mosquito:dos下进入mosquitto的安装目录,执行:mosquitto -c mosquitto.conf

上图:


<think>好的,我现在需要处理用户关于Paho C客户端库1.3版本在Windows系统下的下载和安装指南的查询。首先,我要确认用户的需求:他们需要找到适用于Windows的1.3版本的Paho C库,并获取下载和安装的步骤。 首先,我应该回忆一下Paho项目的结构。Paho是Eclipse基金会下的一个开源项目,提供多种MQTT客户端库。C客户端库的版本历史中,1.3版本可能是一个较旧的版本,因为目前最新的稳定版本可能更高。用户可能因为项目兼容性需要特定版本,所以需要确认该版本是否仍然存在且官方支持。 接下来,我需要检查官方资源。访问Eclipse Paho的官方网站,查看其下载页面或GitHub仓库。通常,开源项目会在GitHub上维护版本发布,用户可以通过Releases页面找到历史版本。如果1.3版本存在,应该在那里能找到对应的二进制文件或源代码。 如果官网上没有直接提供Windows的预编译二进制文件,用户可能需要从源代码编译。这时候需要指导他们安装必要的工具,比如CMake、Visual Studio的构建工具等,并给出编译步骤。 同时,需要注意依赖项,比如OpenSSL库,这在Windows上可能需要额外安装或配置路径。编译过程中常见的错误可能包括路径问题或依赖项缺失,需要提前提醒用户。 另外,用户可能遇到下载链接失效的情况,特别是旧版本。如果官方不再提供1.3版本的下载,可能需要建议用户考虑升级到更新的版本,或者寻找第三方镜像或存档。但需提醒用户注意安全风险,确保来源可信。 安装后的验证步骤也很重要,比如编写一个简单的MQTT客户端测试程序,确保库正确链接并运行。这能帮助用户确认安装是否成功。 最后,生成相关问题,可能涉及版本差异、常见安装问题解决、升级建议等,帮助用户进一步了解相关主题。</think>以下是Paho C客户端库1.3版本在Windows系统的下载安装指南: ### 一、下载步骤 1. **访问官方资源库** 通过Eclipse Paho官方GitHub仓库获取历史版本: [https://github.com/eclipse/paho.mqtt.c/releases/tag/v1.3.0](https://github.com/eclipse/paho.mqtt.c/releases/tag/v1.3.0)[^1] 2. **选择适配文件** 下载预编译的Windows二进制包: `paho-mqtt-c-1.3.0-win32.exe`(32位系统) `paho-mqtt-c-1.3.0-win64.exe`(64位系统) ### 二、安装流程 1. **运行安装程序** 双击下载的EXE文件,按照向导完成安装,默认路径为`C:\Program Files\Paho` 2. **配置环境变量** 将库文件目录(如`C:\Program Files\Paho\lib`)添加到系统PATH变量 3. **验证安装** 创建测试程序`test.c`: ```c #include <MQTTClient.h> int main() { MQTTClient client; MQTTClient_create(&client, "tcp://localhost:1883", "test_client"); return 0; } ``` 使用命令行编译: ```bash gcc -I"C:\Program Files\Paho\include" -L"C:\Program Files\Paho\lib" test.c -lpaho-mqtt3c -o test ``` ### 三、依赖项说明 - 需要提前安装OpenSSL 1.1.x版本[^2] - 若使用动态链接库(DLL),需将`paho-mqtt3c.dll`复制到系统目录或程序运行目录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值