c++9 在linux下实现mqtt通信 给出详细代码示例
时间: 2024-02-18 12:04:31 浏览: 166
c++实现mqtt
以下是一个C++实现的MQTT客户端示例,可以在Linux系统上使用。需要先安装paho-mqtt C++库。
```
#include <iostream>
#include <cstring>
#include <cstdlib>
#include "mqtt/async_client.h"
const std::string ADDRESS("tcp://localhost:1883");
const std::string CLIENT_ID("mqtt_cpp_client");
const int QOS = 1;
const int TIMEOUT = 10000;
class callback : public virtual mqtt::callback
{
void connection_lost(const std::string& cause) override
{
std::cout << "Connection lost" << std::endl;
if (!cause.empty()) {
std::cout << "\tcause: " << cause << std::endl;
}
}
void delivery_complete(mqtt::delivery_token_ptr tok) override
{
std::cout << "Delivery complete for token: " << (tok ? tok->get_message_id() : -1) << std::endl;
}
};
int main(int argc, char* argv[])
{
mqtt::async_client client(ADDRESS, CLIENT_ID);
callback cb;
client.set_callback(cb);
mqtt::connect_options connOpts;
connOpts.set_keep_alive_interval(20);
connOpts.set_clean_session(true);
try {
mqtt::token_ptr conntok = client.connect(connOpts, nullptr, nullptr);
conntok->wait_for_completion();
}
catch (const mqtt::exception& exc) {
std::cerr << "Error: " << exc.what() << std::endl;
return 1;
}
mqtt::topic topic(client, "test/topic", QOS);
mqtt::token_ptr subtok = topic.subscribe();
subtok->wait_for_completion();
mqtt::message_ptr pubmsg = mqtt::make_message("test payload");
pubmsg->set_qos(QOS);
mqtt::token_ptr pubtok = topic.publish(pubmsg);
pubtok->wait_for_completion();
client.disconnect()->wait_for_completion();
return 0;
}
```
这个示例使用了paho-mqtt C++库来实现MQTT客户端的连接、订阅和发布功能。首先创建一个mqtt::async_client对象,然后设置回调函数和连接选项。接着使用connect()方法连接到MQTT代理服务器。连接后可以使用mqtt::topic对象来订阅和发布消息。订阅时使用subscribe()方法,发布时使用publish()方法,都需要指定消息质量。最后使用disconnect()方法断开连接。
需要注意的是,这个示例连接到了本地的MQTT代理服务器,如果需要连接到其他的MQTT代理服务器,需要修改ADDRESS变量。此外,需要在编译时链接paho-mqtt C++库。
阅读全文