当前位置:   article > 正文

Linux Mqtt客户端编程

Linux Mqtt客户端编程

安装Eclipse Paho MQTT C++库

  1. 安装依赖项

    sudo apt-get update sudo apt-get install libpaho-mqttpp-dev libpaho-mqtt-dev

  2. 下载和编译Eclipse Paho MQTT C++库

    1. git clone https://github.com/eclipse/paho.mqtt.cpp.git
    2. cd paho.mqtt.cpp
    3. mkdir build
    4. cd build
    5. cmake ..
    6. make
    7. sudo make install

编写MQTT客户端程序

  1. #include <iostream>
  2. #include <string>
  3. #include <chrono>
  4. #include <thread>
  5. #include "mqtt/async_client.h"
  6. // 定义MQTT服务器地址和客户端ID
  7. const std::string SERVER_ADDRESS("tcp://mqtt.eclipse.org:1883");
  8. const std::string CLIENT_ID("paho_cpp_async_publish_subscribe");
  9. const std::string TOPIC("test_topic");
  10. const int QOS = 1;
  11. const auto TIMEOUT = std::chrono::seconds(10);
  12. class callback : public virtual mqtt::callback,
  13. public virtual mqtt::iaction_listener
  14. {
  15. // 消息到达时的回调函数
  16. void message_arrived(mqtt::const_message_ptr msg) override {
  17. std::cout << "Message arrived" << std::endl;
  18. std::cout << " topic: '" << msg->get_topic() << "'" << std::endl;
  19. std::cout << " payload: '" << msg->to_string() << "'" << std::endl;
  20. }
  21. // 连接丢失时的回调函数
  22. void connection_lost(const std::string& cause) override {
  23. std::cout << "\nConnection lost" << std::endl;
  24. if (!cause.empty())
  25. std::cout << "Cause: " << cause << std::endl;
  26. }
  27. // 订阅成功或失败时的回调函数
  28. void on_failure(const mqtt::token& tok) override {
  29. std::cout << "Subscription failed" << std::endl;
  30. }
  31. void on_success(const mqtt::token& tok) override {
  32. std::cout << "Subscription succeeded" << std::endl;
  33. }
  34. };
  35. int main(int argc, char* argv[]) {
  36. // 创建MQTT异步客户端
  37. mqtt::async_client client(SERVER_ADDRESS, CLIENT_ID);
  38. // 设置回调函数
  39. callback cb;
  40. client.set_callback(cb);
  41. // 设置连接选项
  42. mqtt::connect_options connOpts;
  43. connOpts.set_clean_session(true);
  44. try {
  45. // 连接到MQTT服务器
  46. std::cout << "Connecting to the MQTT server..." << std::flush;
  47. mqtt::token_ptr conntok = client.connect(connOpts);
  48. conntok->wait();
  49. std::cout << "OK" << std::endl;
  50. // 订阅主题
  51. std::cout << "Subscribing to topic '" << TOPIC << "'..." << std::flush;
  52. client.subscribe(TOPIC, QOS, nullptr, cb);
  53. std::cout << "OK" << std::endl;
  54. // 发布消息
  55. std::string payload = "Hello, MQTT!";
  56. mqtt::message_ptr pubmsg = mqtt::make_message(TOPIC, payload);
  57. pubmsg->set_qos(QOS);
  58. client.publish(pubmsg)->wait_for(TIMEOUT);
  59. std::cout << "Message published" << std::endl;
  60. // 等待一段时间,以接收消息
  61. std::this_thread::sleep_for(std::chrono::seconds(10));
  62. // 断开连接
  63. std::cout << "Disconnecting from the MQTT server..." << std::flush;
  64. conntok = client.disconnect();
  65. conntok->wait();
  66. std::cout << "OK" << std::endl;
  67. }
  68. catch (const mqtt::exception& exc) {
  69. std::cerr << exc.what() << std::endl;
  70. return 1;
  71. }
  72. return 0;
  73. }

编译和运行程序

  1. 创建CMakeLists.txt

    1. cmake_minimum_required(VERSION 3.5)
    2. project(MQTTClient)
    3. set(CMAKE_CXX_STANDARD 11)
    4. find_package(PahoMqttCpp REQUIRED)
    5. add_executable(MQTTClient main.cpp)
    6. target_link_libraries(MQTTClient PahoMqttCpp::paho-mqttpp3)

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号