当使用 C++ 语言与 MQTT 进行数据发送和接收时,您可以使用 MQTT 客户端库,如 Paho MQTT C++ 客户端库。以下是一个简单的示例,演示了如何在 C++ 中使用 Paho MQTT C++ 客户端库进行数据发送和接收。
首先,确保您已经安装了 Paho MQTT C++ 客户端库。然后,按照以下步骤操作:
-
创建一个名为
mqtt_demo.cpp的源代码文件。 -
在该文件中编写 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;
}
- 创建另一个源代码文件,命名为
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;
}
- 编译并运行发布者和订阅者:
g++ -o mqtt_demo_publisher mqtt_demo.cpp -lpaho-mqttpp3 -lpaho-mqtt3a
g++ -o mqtt_demo_subscriber mqtt_subscriber.cpp -lpaho-mqttpp3 -lpaho-mqtt3a
- 在两个不同的终端窗口中分别运行发布者和订阅者:
./mqtt_demo_publisher
./mqtt_demo_subscriber
发布者将发送消息 "Hello, MQTT!",而订阅者将接收并打印该消息。
请注意,这是一个简单的使用 Paho MQTT C++ 客户端库进行数据发送和接收的示例。您可以根据需要进行更复杂的配置和修改,例如设置其他连接选项、处理连接丢失和消息到达的情况等。