最近因為工作需要,需要使用c# 語言編寫乙個通過mqtt協議 ,上傳資料到雲端的工具。因為之前沒有用過mqtt,所以 使用的時候遇到很多問題.下面將會把我遇到的問題一一解釋。
1.引用原始碼庫位址
2.說明
3.使用後遇到的問題
當網路中斷後,mqtt 程式有時候不會自動重連。
解決方案 新增監控mqtt連線狀態
1.新增全域性靜態變數 uplibrary.networking.m2mqtt.mqttconfig.issocketrun;
class mqttconfig12
32.修改mqttclient 類 的connect 方法,在連線成功後把issocketrun = true.
mqttconfig.issocketrun = true;
///
/// connect to broker
///
/// client identifier
/// username
/// password
/// will retain flag
/// will qos level
/// will flag
/// will topic
/// will message
/// clean sessione flag
/// keep alive period
/// return code of connack message from broker
public byte connect(string clientid,
string username,
string password,
bool willretain,
byte willqoslevel,
bool willflag,
string willtopic,
string willmessage,
bool cleansession,
ushort keepaliveperiod)
catch (exception ex)
this.lastcommtime = 0;
this.isrunning = true;
mqttconfig.issocketrun = true;
this.isconnectionclosing = false;
// start thread for receiving messages from broker
fx.startthread(this.receivethread);
....
3.繼續修改 mqttclient .cs類中的ping() 方法
///
/// execute ping to broker for keep alive
///
/// pingresp message from broker
private mqttmsgpingresp ping()
catch (exception e)
", e.tostring());
#endif
mqttconfig.issocketrun = false;
// client must close connection
this.onconnectionclosing();
return null;}}
4.最後在我們程式集入口初始化程式的時候 新增執行緒呼叫 。當mqtt中斷後就會自動重連 ,另外提醒方法異常時一定要異常處理哦。
while (true)
issocketrun ", i, uplibrary.networking.m2mqtt.mqttconfig.issocketrun));
if (!uplibrary.networking.m2mqtt.mqttconfig.issocketrun)
system.threading.thread.sleep(10000);
}mqtt 訂閱
// create client instance
mqttclient client = new mqttclient(ipaddress.parse(mqtt_broker_address));
// 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)
mqtt 發布
// create client instance
mqttclient client = new mqttclient(ipaddress.parse(mqtt_broker_address));
string clientid = guid.newguid().tostring();
client.connect(clientid);
string strvalue = convert.tostring(value);
// publish a message on "/home/temperature" topic with qos 2
client.publish("/home/temperature", encoding.utf8.getbytes(strvalue), mqttmsgbase.qos_level_exactly_once, false);
MQTT客戶端移植C語言
首先說明一下,下面demo是在linux上跑的,展現了嵌入式mqtt客戶端使用的一般流程,其核心就是把一些資料按mqtt協議打包好,再通過socket傳送到伺服器,你也可以移植到微控制器上,比如stm32,前提是能夠連線到服務通訊,一般wifi模組例如esp8266,內建了tcp ip協議棧,微控制...
ORACLE中客戶端連線伺服器端常見問題
要排除客戶端與伺服器端的連線問題,首先檢查客戶端配置是否正確 客戶端配置必須與資料庫伺服器端監聽配置一致 再根據錯誤提示解決。下面列出幾種常見的連線問題 1 ora 12541 tns 沒有 顯而易見,伺服器端的 沒有啟動,另外檢查客戶端ip位址或埠填寫是否正確。啟動 lsnrctl start 或...
c mqtt客戶端 mqtt應用於程序間通訊
這一篇我們就來分享mqtt應用於程序間通訊的例項。我們沿用往期文章 例說嵌入式實用知識之json資料 的綜合demo來改造改造。那個綜合demo的功能是這樣子的 這是以socket來作為程序間通訊的方式,並且這個demo是基於windows寫的,需要包含windows特定的標頭檔案。本篇筆記我們把上...