通過 C 實現 MQTT 的訂閱和發布

2021-09-10 19:24:37 字數 4256 閱讀 8940

第三步:執行

第二部分:單向認證模式

第四步:執行

本章節主要介紹用c#實現mqtt的訂閱和發布。

分為 無加密模式 和 單向認證模式。

測試環境為本機。

準備工作:

保持安裝後預設配置即可

visual studio中新建控制台應用程式normalpublisher,新增m2mqtt引用。program類中如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using uplibrary.networking.m2mqtt;

using uplibrary.networking.m2mqtt.messages;

namespace normalpublisher

,content:"

, topic, content));}}}

visual studio中新建控制台應用程式normalsubscriber,新增m2mqtt引用。program類中如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using uplibrary.networking.m2mqtt;

using system.net;

using uplibrary.networking.m2mqtt.messages;

namespace normalsubscriber

,new

byte

);}static

void

client_mqttmsgpublishreceived

(object sender,

mqttmsgpublisheventargs e)

,content:"

, e.topic, encoding.utf8.

getstring

(e.message)))

;}}}

啟動mqtt**端。(訂閱端和發布端啟動前必須保證**端已啟動)

啟動訂閱端normalsubscriber.exe

啟動發布端normalpublisher.exe

執行結果截圖如下:

可以看到,訂閱端接收到了發布端發布的訊息,訊息主題為/home/temperature,訊息內容為hello mqtt

單向認證需要根證書和服務端證書

單向認證需要**端開啟ssl/tls,具體操作需要通過配置mosquitto.conf實現。

關於證書的生成和單向認證mosquitto.conf的配置,請參考上一節 證書生成及mosquitto配置

visual studio中新建控制台應用程式onewaypublisher,新增m2mqtt引用。program類中如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.security.cryptography.x509certificates;

using uplibrary.networking.m2mqtt;

using uplibrary.networking.m2mqtt.messages;

namespace onewaypublisher))

;string clientid = guid.

newguid()

.tostring()

; client.

connect

(clientid)

;string strvalue = convert.

tostring

(content)

;// publish a message on "/home/temperature" topic with qos 2

client.

publish

(topic, encoding.utf8.

getbytes

(strvalue)

, mqttmsgbase.qos_level_exactly_once,

false);

console.

writeline

(string

.format

("publisher,topic:,content:"

, topic, content));}}}

visual studio中新建控制台應用程式onewaysubscriber,新增m2mqtt引用。program類中如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using uplibrary.networking.m2mqtt;

using uplibrary.networking.m2mqtt.messages;

using system.security.cryptography.x509certificates;

namespace onewaysubscriber))

;// register to message received

client.mqttmsgpublishreceived +

= client_mqttmsgpublishreceived;

string clientid = guid.

newguid()

.tostring()

; client.

connect

(clientid)

;// subscribe to the topic "/home/temperature" with qos 2

client.

subscribe

(new

string

,new

byte

);}static

void

client_mqttmsgpublishreceived

(object sender,

mqttmsgpublisheventargs e)

,content:"

, e.topic, encoding.utf8.

getstring

(e.message)))

;}}}

啟動mqtt**端。(訂閱端和發布端啟動前必須保證**端已啟動)

啟動訂閱端onewaysubscriber.exe

啟動發布端onewaypublisher.exe

執行結果截圖如下:

可以看到,訂閱端接收到了發布端發布的訊息,訊息主題為/home/temperature,訊息內容為hello mqtt

由於採取了單向認證,資料在傳輸過程中均為密文。訂閱端接收到訊息後,經過證書中的對稱加密演算法解密,就得到了我們需要的資料。

關於ssl單向認證和雙向認證原理可以參考

C 整合MQTT 發布 訂閱

服務端 服務端是乙個控制台應用 using mqttnet using mqttnet.core.adapter using mqttnet.core.diagnostics using mqttnet.core.protocol using mqttnet.core.server using sy...

python 連線mqtt發布和訂閱資訊

pip install paho mqttimport paho.mqtt.client as mqtt import json import time host 127.0.0.1 mqtt伺服器位址 port 1883 client id 101 客戶端id,自己設定 同時訂閱多個主題方式使用 ...

MQTT的訂閱和發布,新手通俗的理解

剛開始接觸物聯網,iot,mqtt,弄的一頭霧水,對於mqtt各方的身份和功能多有誤解,直到自己搞了一套東西,才知道 給個建議,在兩眼一抹黑,不了解架構的情況下,不要先看 否則你會無比痛苦,還是先通過工具進行系統推演。看來這個服務端類似乙個公告欄,裡面各種公告,甲跑過來說,凡是涉及足球的 publi...