C++ 使用MQTT发送、接收数据DEMO

1,798 阅读1分钟

当使用 C++ 语言与 MQTT 进行数据发送和接收时,您可以使用 MQTT 客户端库,如 Paho MQTT C++ 客户端库。以下是一个简单的示例,演示了如何在 C++ 中使用 Paho MQTT C++ 客户端库进行数据发送和接收。

首先,确保您已经安装了 Paho MQTT C++ 客户端库。然后,按照以下步骤操作:

  1. 创建一个名为 mqtt_demo.cpp 的源代码文件。

  2. 在该文件中编写 MQTT 发布者(Publisher)的代码:

#include <iostream>
#include <string>
#include "mqtt/async_client.h"

class MqttCallback : public virtual mqtt::callback {
public:
    void connection_lost(const std::string& cause) override {
        std::cout << "Connection lost: " << cause << std::endl;
    }
};

int main() {
    const std::string serverAddress = "tcp://localhost:1883";
    const std::string clientId = "mqtt_publisher";

    mqtt::async_client client(serverAddress, clientId);

    MqttCallback callback;
    client.set_callback(callback);

    mqtt::connect_options connOpts;
    connOpts.set_keep_alive_interval(20);
    connOpts.set_clean_session(true);

    mqtt::token_ptr conntok = client.connect(connOpts);
    conntok->wait();

    const std::string topic = "mqtt_demo_topic";
    const std::string messageStr = "Hello, MQTT!";
    mqtt::message_ptr pubmsg = mqtt::make_message(topic, messageStr);
    pubmsg->set_qos(1);

    client.publish(pubmsg)->wait();

    client.disconnect()->wait();

    return 0;
}
  1. 创建另一个源代码文件,命名为 mqtt_subscriber.cpp,编写 MQTT 订阅者(Subscriber)的代码:
#include <iostream>
#include <string>
#include "mqtt/async_client.h"

class MqttCallback : public virtual mqtt::callback {
public:
    void connection_lost(const std::string& cause) override {
        std::cout << "Connection lost: " << cause << std::endl;
    }

    void message_arrived(const std::string& topic, mqtt::message_ptr msg) override {
        std::cout << "Message received on topic: " << topic << std::endl;
        std::cout << "Message content: " << msg->to_string() << std::endl;
    }
};

int main() {
    const std::string serverAddress = "tcp://localhost:1883";
    const std::string clientId = "mqtt_subscriber";

    mqtt::async_client client(serverAddress, clientId);

    MqttCallback callback;
    client.set_callback(callback);

    mqtt::connect_options connOpts;
    connOpts.set_keep_alive_interval(20);
    connOpts.set_clean_session(true);

    mqtt::token_ptr conntok = client.connect(connOpts);
    conntok->wait();

    const std::string topic = "mqtt_demo_topic";
    client.subscribe(topic, 1)->wait();

    while (true) {
        // Keep the program running to receive messages
    }

    client.disconnect()->wait();

    return 0;
}
  1. 编译并运行发布者和订阅者:
g++ -o mqtt_demo_publisher mqtt_demo.cpp -lpaho-mqttpp3 -lpaho-mqtt3a
g++ -o mqtt_demo_subscriber mqtt_subscriber.cpp -lpaho-mqttpp3 -lpaho-mqtt3a
  1. 在两个不同的终端窗口中分别运行发布者和订阅者:
./mqtt_demo_publisher
./mqtt_demo_subscriber

发布者将发送消息 "Hello, MQTT!",而订阅者将接收并打印该消息。

请注意,这是一个简单的使用 Paho MQTT C++ 客户端库进行数据发送和接收的示例。您可以根据需要进行更复杂的配置和修改,例如设置其他连接选项、处理连接丢失和消息到达的情况等。