上一篇寫服務端的文章《MQTTnet4入門(一)實現服務端》已經是去年年底,現在MQTTnet的版本是4.2.1.781,總的來說改動不大。下麵以新版為例實現一個客戶端。 var mqttClientOptions = new MqttClientOptionsBuilder() .WithTcpS ...
上一篇寫服務端的文章《MQTTnet4入門(一)實現服務端》已經是去年年底,現在MQTTnet的版本是4.2.1.781,總的來說改動不大。下麵以新版為例實現一個客戶端。
var mqttClientOptions = new MqttClientOptionsBuilder()
.WithTcpServer("地址", 埠)
.WithClientId("我是客戶端名稱")//連接id
.WithCredentials("demo","123456")//如果有用戶名密碼
.WithTls()//如果啟用了ssl/tls
.WithProtocolVersion(MqttProtocolVersion.V500)//如果用mqtt5
.Build();//配置
IMqttClient client = new MqttFactory().CreateMqttClient();//創建連接
client.ApplicationMessageReceivedAsync += MqttClient_ApplicationMessageReceivedAsync;//收到消息的事件
client.ConnectedAsync += Client_ConnectedAsync;//連接成功的事件
client.ConnectingAsync += Client_ConnectingAsync;//連接中的事件
配置裡面一個大坑害我調了一個小時,如果mqtt服務端需要用戶名和密碼,那麼使用.WithCredentials()
來填寫。我一直以為是.WithUserProperty()
,極有迷惑性。
連接並訂閱主題:
while (true)
{
try
{
if (!await client.TryPingAsync())
{
await client.ConnectAsync(mqttClientOptions, CancellationToken.None);
var mqttSubscribeOptions = new MqttFactory().CreateSubscribeOptionsBuilder()
.WithTopicFilter(
f =>
{
f.WithTopic("shi");//訂閱主題
})
.Build();
await client.SubscribeAsync(mqttSubscribeOptions);
}
}
catch
{
// 錯誤
}
finally
{
// 每5秒檢查一次連接狀態,連接失敗重連
await Task.Delay(TimeSpan.FromSeconds(5));
}
}