以下示例代码实现了连接到 MQTT 代理服务器、订阅主题以及接收消息的功能。
首先,你需要安装 paho-mqtt-cpp 库,不同的操作系统安装方式有所不同,例如在 Ubuntu 上可以使用 apt-get install libpaho-mqttpp3-dev 命令安装。
以下是示例代码:
#include <iostream>
#include <string>
#include <memory>
#include <MQTTClient.h>
#include <MQTTClientPersistence.h>
// 消息回调函数
void messageArrived(MessageData* md) {
MQTT::Message& message = md->message;
std::string payload(reinterpret_cast<char*>(message.payload), message.payloadlen);
std::cout << "Received message on topic: " << message.topicName << std::endl;
std::cout << "Message payload: " << payload << std::endl;
}
int main() {
try {
// 创建 MQTT 客户端对象
std::string clientId = "exampleClient";
std::string brokerAddress = "tcp://localhost:1883"; // MQTT 代理服务器地址
std::unique_ptr<MQTT::Client> client = std::make_unique<MQTT::Client>(brokerAddress, clientId);
// 设置回调函数
client->setMessageCallback(messageArrived);
// 创建连接选项
MQTT::ConnectOptions connOpts;
connOpts.setCleanSession(true);
// 连接到 MQTT 代理服务器
std::cout << "Connecting to MQTT broker..." << std::endl;
client->connect(connOpts);
std::cout << "Connected to MQTT broker." << std::endl;
// 订阅主题
std::string topic = "test/topic"; // 要订阅的主题
int qos = 0; // 服务质量等级
client->subscribe(topic, qos);
std::cout << "Subscribed to topic: " << topic << std::endl;
// 模拟运行一段时间,接收消息
for (int i = 0; i < 10; ++i) {
// 等待并处理消息
client->yield(1000);
}
// 取消订阅
client->unsubscribe(topic);
std::cout << "Unsubscribed from topic: " << topic << std::endl;
// 断开连接
client->disconnect();
std::cout << "Disconnected from MQTT broker." << std::endl;
} catch (const MQTT::Exception& e) {
std::cerr << "MQTT Exception: " << e.what() << std::endl;
} catch (...) {
std::cerr << "An unknown exception occurred." << std::endl;
}
return 0;
}
上述代码中:
1. 定义了 messageArrived 回调函数,用于处理接收到的 MQTT 消息。
2. 在 main 函数中,创建了 MQTT 客户端对象,设置连接选项并连接到 MQTT 代理服务器。
3. 订阅了指定的主题,通过 yield 方法等待并处理接收到的消息。
4. 最后取消订阅并断开与代理服务器的连接。
你可以根据实际需求修改代理服务器地址、客户端 ID、订阅主题等参数。