#include <iostream>
#include <mqtt/async_client.h>
// MQTT服务器的URI和客户端ID
const std::string SERVER_URI = "tcp://broker.hivemq.com:1883";
const std::string CLIENT_ID = "cpp_test_client";
// 回调类,用于处理MQTT事件
class callback : public virtual mqtt::callback {
public:
void connected(const std::string& cause) override {
std::cout << "Connected to MQTT broker" << std::endl;
}
void connection_lost(const std::string& cause) override {
std::cout << "\nConnection lost" << std::endl;
if (!cause.empty())
std::cout << "\tcause: " << cause << std::endl;
}
void message_arrived(mqtt::const_message_ptr msg) override {
std::cout << "Message arrived:" << std::endl;
std::cout << "\ttopic: '" << msg->get_topic() << "'" << std::endl;
std::cout << "\tpayload: '" << msg->to_string() << "'\n" << std::endl;
}
};
int main() {
// 创建异步客户端实例
mqtt::async_client client(SERVER_URI, CLIENT_ID);
// 创建回调对象并将其设置给客户端
callback cb;
client.set_callback(cb);
// 连接到MQTT代理
mqtt::connect_options connOpts;
connOpts.set_clean_session(true);
try {
std::cout << "Connecting to the MQTT server..." << std::endl;
client.connect(connOpts)->wait();
std::cout << "Connected!" << std::endl;
// 订阅主题
std::string topic = "test/topic";
int qos = 1;
std::cout << "Subscribing to topic '" << topic << "'\n"
<< "\tfor client " << CLIENT_ID << " using QoS" << qos << std::endl;
client.subscribe(topic, qos)->wait();
// 等待用户输入以保持程序运行
std::cout << "Press Q <CR> to quit\n";
while (std::cin.get() != 'Q') {
// 等待用户输入'Q'退出
}
// 断开连接
std::cout << "\nDisconnecting from the MQTT server." << std::endl;
client.disconnect()->wait();
std::cout << "Disconnected!" << std::endl;
} catch (const mqtt::exception& exc) {
std::cerr << "Error: " << exc.what() << std::endl;
return 1;
}
return 0;
}
#include <mqtt/async_client.h>
引入了MQTT库中的异步客户端功能。SERVER_URI
和 CLIENT_ID
分别是MQTT服务器的地址和客户端的唯一标识符。callback
类继承自 mqtt::callback
,实现了连接、断开连接和消息到达时的处理方法。mqtt::async_client
实例并设置回调对象。mqtt::connect_options
设置连接选项,并调用 client.connect()
方法连接到MQTT代理。client.subscribe()
方法订阅指定的主题。std::cin.get()
等待用户输入以保持程序运行。client.disconnect()
方法断开连接。try-catch
捕获并处理可能发生的异常。这个示例展示了如何使用 C++ 和 Paho MQTT 库与MQTT代理进行交互。
上一篇:c++ cmake
下一篇:c++ 串口通讯
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站