介绍
怎么在c#中使用Mqtt实现一个断线重连功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
(1)如果提供的服务端地址是不可解析的,会引发异常无法实例化MqttClient对象。
(2)连接无法连接时会引发异常,与为假。
(3)服务端断开会触发客户端的ConnectionClosed事件,与为假。
(4)重新连接需要重新订阅订阅主题。
(5) MqttClient。订阅第一个参数为订阅主题数组,第二个为相应的qosLevel,两个数组长度必须一致,否则会异常。
重连流程控制
主要代码实现
(1)线程主体
//,自动重连主体 private void  _TryContinueConnect () { if 才能;(与),返回; Thread 才能;retryThread =, new 线程(new ThreadStart(委托 {才能 ,,,while (_MqttClient ==, null | |, ! _MqttClient.IsConnected) ,,,{ ,,,,,if (_ToClose),打破; ,,,,,if (_MqttClient ==, null) ,,,,,{ ,,,,,,,_BuildClient (); ,,,,,,,thread . sleep (3000); ,,,,,,,继续; ,,,,,} ,,,,,试一试 ,,,,,{ ,,,,,,,_TryCount + +; ,,,,,,,_Connect (),, ,,,,,} ,,,,,catch (Exception ce) ,,,,,{ ,,,,,,,Debug.WriteLine (“re  connect 例外:“,+,ce.Message); ,,,,,} ,,,,,//,如果还没连接不符合结束条件则睡2秒 ,,,,,if (_MqttClient.IsConnected !) ,,,,,{ ,,,,,,,thread . sleep (2000); ,,,,,} ,,,} ,,})); ,,,,, retryThread.Start才能(); }
(2)实例化部分
//,实例化客户端 private void  _BuildClient () { ,试一试 {才能 ,,,_MqttClient =, new MqttClient (_MqttServer); ,,} catch 才能;(Exception e) {才能 ,,,Debug.WriteLine (“build  client 错误:“,+,e.Message); ,,,返回; ,,}//,才能消息到达事件绑定 _MqttClient.MqttMsgPublishReceived 才能+=,client_MqttMsgPublishReceived;//才能,连接断开事件绑定 _MqttClient.ConnectionClosed 才能+=,(发送方,e),=比; {才能 ,,,if (_ToClose !) ,,,{ ,,,,,//,尝试重连 ,,,,,_TryContinueConnect (); ,,,} ,,}; }
(3)尝试连接部分
//,发起一次连接,连接成功则订阅相关主题, private void  _Connect () { if 才能;(String.IsNullOrEmpty (_MqttUsername)) {才能 ,,,var b =, _MqttClient.Connect (_MqttClientId); ,,} 其他的才能 {才能 ,,,var b =, _MqttClient.Connect (_MqttClientId, _MqttUsername,, _MqttUserpass); ,,}, if 才能;(_MqttClient.IsConnected) {才能 ,,,_MqttClient.Subscribe (new string [], {,“topic1",,“topic2",}, ,,,,,new byte [], {MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE的不同之处是,MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE }); ,,} }
关于怎么在c#中使用Mqtt实现一个断线重连功能问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。