MQTT協議使用mosquitto服務器在windows下使用libmosquitto訂閱發布,簡單小例子


 

1.去官網下載mosquitto(我使用Binary Installation--windows--mosquitto-1.4.14-install-win32.exe):

  

  下載地址:https://mosquitto.org/download/

2.雙擊安裝。

3.使用:

  進入mosquitto安裝目錄,雙擊“mosquitto.exe”開啟服務。

  如果出現缺少 .dll 文件,去www.zhaodll.com下載相應的dll文件。

  ps:(我在打開mosquitto_sub.exe、mosquitto_pub.exe時缺少pthreadVC2.dll。下載之后放到mosquitto安裝目錄下即可。)

  

  進入安裝目錄,雙擊雙擊“mosquitto.exe”即可,因為上面已經設置了手動啟動mosquitto服務,所以該窗口不要關閉,測試過程重要一直啟動該服務

   對於訂閱:

  win+R鍵,輸入cmd,即打開命令行,進入mosquitto目錄,輸入:mosquitto_sub -v -t MqttTest 
  -v表示打印更多調試信息,-t表示指定主題,MqttTest即為主題名

  對於發布:

  win+R鍵,輸入cmd,即打開命令行,進入mosquitto目錄,輸入: mosquitto_pub -t MqttTest -m HelloMqtt 
  -t表示指定主題,MqttTest即為主題名, 
  -m表示指定消息內容,HelloMqtt即為消息內容

以上測試可用

==================================================================================================================

4.在vs下使用(我用的是vs2015)

1. 創建Win32控制台程序; 
2. 將mosquitto安裝目錄下的devel文件夾中的mosquitto.h、mosquittopp.h、mosquittopp.lib拷貝到工程目錄下(自己創建的cpp文件所在的位置)。
3. 修改mosquittopp.h文件:

#include <mosquitto.h>

  尖括號改為冒號(如下)

#include "mosquitto.h"

  創建你自己的cpp文件,填入下面的代碼:

#include <string>
#include <iostream> 
#include "mosquitto.h"
#include "mosquittopp.h" 
#pragma comment(lib, "mosquittopp.lib")
#include "stdafx.h" 
class mqtt_test:public mosqpp::mosquittopp 
{ 
public: 
    mqtt_test(const char *id):mosquittopp(id){} 
    void on_connect(int rc) {std::cout<<"on_connect"<<std::endl;} 
    void on_disconnect() {std::cout<<"on_disconnect"<<std::endl;} 
    void on_publish(int mid) {std::cout<<"on_publish"<<std::endl;} 
    void on_subscribe(int mid, int qos_count, const int *granted_qos);//訂閱回調函數
    void on_message(const struct mosquitto_message *message);//訂閱主題接收到消息
}; 
std::string g_subTopic="subTopic";
void mqtt_test::on_subscribe(int mid, int qos_count, const int *granted_qos)
{
    std::cout<<"訂閱 mid: %d "<<mid<<std::endl;
}
void mqtt_test::on_message(const struct mosquitto_message *message) 
{
    bool res=false;
    mosqpp::topic_matches_sub(g_subTopic.c_str(),message->topic,&res);
    if(res)
    {
        std::string strRcv=(char *)message->payload;
        std::cout<<"來自<"<<message->topic<<">的消息:"<<strRcv<<std::endl;
    }
}
int main(int argc, char* argv[]) 
{ 
    mosqpp::lib_init(); 
    mqtt_test test("client6"); 

    int rc; 
    char buf[1024] = "This is test"; 
    test.username_pw_set("wmy","mqtt");
    rc = test.connect("127.0.0.1");//本地IP 
    char err[1024];
    if(rc == MOSQ_ERR_ERRNO)
        std::cout<<"連接錯誤:"<< mosqpp::strerror(rc)<<std::endl;//連接出錯
    else if (MOSQ_ERR_SUCCESS == rc) 
    { 
        //發布測試
        rc = test.loop(); 
        if (MOSQ_ERR_SUCCESS == rc) 
        { 
            rc = test.publish(NULL, "topic/test", strlen(buf), (const void *)buf); 
            rc = test.loop(); 
        } 
       // rc = test.disconnect(); //訂閱測試時注釋該行
      //  rc = test.loop(); //訂閱測試時注釋該行

        test.subscribe(NULL,g_subTopic.c_str());//訂閱測試取消注釋該行
        rc = test.loop_forever();//訂閱測試取消注釋該行
    }         
    mosqpp::lib_cleanup(); 
    system("pause");
    return 0; 
}

build上述代碼,應該沒問題,然后將mosquitto安裝目錄下的mosquitto.dll、mosquittopp.dll以及ssleay32.dll、libeay32.dll、pthreadVC2.dll,一共5個dll,一起拷貝到工程輸出目錄下,即exe所在目錄; 

然后打開mosquitto.exe      (服務)

然后編譯運行你自己的cpp程序 (訂閱)

再然后用win+R--cmd--輸入 mosquitto_pub  -t  subTopic  -m HelloMqtt 。發布消息hellomqtt,主題是subTopic。(發布)

結果如下圖:

 

參考  http://www.zhimengzhe.com/windows/123357.html   這篇文章的

關於.lib .dll 的介紹:http://www.cppblog.com/biao/archive/2013/03/14/198416.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM