MQTTnet是实现mqtt协议的net包
可以在MQTTnet 查看详细的使用说明。
实现client
using Microsoft.Extensions.Logging;
using MQTTnet;
using MQTTnet.Client.Options;
using MQTTnet.Client.Receiving;
using MQTTnet.Protocol;
using MQTTnet.Server;
using Newtonsoft.Json.Linq;
using System;
using System.Threading;
namespace clientforMqtt
{
class Program
{
static async System.Threading.Tasks.Task Main(string[] args)
{
//创建一个mqttclient
var factory = new MqttFactory();
var mqttClient = factory.CreateMqttClient();
//创建tcp options 用于连接mqtt
var options = new MqttClientOptionsBuilder()
//clinet的名称
.WithClientId("client1")
//mqtt broker的服务器地址IP,默认的是1883端口
.WithTcpServer("127.0.0.1",1884)
//hivemq的登录用户名
.WithUserProperty("admin","hivemq")
.WithCleanSession()
.Build();
await mqttClient.ConnectAsync(options, CancellationToken.None);
Console.WriteLine("连接成功");
while(true)
{
Console.WriteLine("请输入MQTT 主题topic,如果退出,请输入Q");
string topic = Console.ReadLine();
if (string.Equals(topic, "Q"))
break;
Console.WriteLine("请输入MQTT 内容");
string payload = Console.ReadLine();
var message = new MqttApplicationMessageBuilder()
.WithTopic(topic)
.WithPayload(payload)
.WithExactlyOnceQoS()
.WithRetainFlag()
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
Console.WriteLine("发布消息成功");
Console.WriteLine("-----------------");
}
}
}
}
实现一个消费者客户端
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
using System;
using System.Text;
using System.Threading;
namespace CosumeMqtt
{
class Program
{
static async System.Threading.Tasks.Task Main(string[] args)
{
//创建一个mqttclient
var factory = new MqttFactory();
var mqttClient = factory.CreateMqttClient();
//创建tcp options 用于连接mqtt
var options = new MqttClientOptionsBuilder()
//clinet的名称
.WithClientId("client2")
//mqtt broker的服务器地址IP,默认的是1883端口
.WithTcpServer("127.0.0.1", 1884)
//hivemq的登录用户名
.WithUserProperty("admin", "hivemq")
.WithCleanSession()
.Build();
await mqttClient.ConnectAsync(options, CancellationToken.None);
Console.WriteLine("连接成功");
await mqttClient.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("mytopic").Build());
await mqttClient.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("hello").Build());
Console.WriteLine("订阅消息成功");
mqttClient.UseApplicationMessageReceivedHandler(async e =>
{
Console.WriteLine("### RECEIVED APPLICATION MESSAGE ###");
Console.WriteLine($"+ Topic = {e.ApplicationMessage.Topic}");
Console.WriteLine($"+ Payload = {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
Console.WriteLine($"+ QoS = {e.ApplicationMessage.QualityOfServiceLevel}");
Console.WriteLine($"+ Retain = {e.ApplicationMessage.Retain}");
Console.WriteLine();
});
Console.ReadLine();
}
}
}
实现mqtt broker
using MQTTnet;
using MQTTnet.Server;
using System;
using System.Text;
namespace MqttServer
{
class Program
{
static async System.Threading.Tasks.Task Main(string[] args)
{
var optionsBuilder = new MqttServerOptionsBuilder()
.WithConnectionBacklog(100)
.WithDefaultEndpointPort(1884);
var mqttServer = new MqttFactory().CreateMqttServer();
await mqttServer.StartAsync(optionsBuilder.Build());
Console.WriteLine("mqtt服务器创建成功");
mqttServer.UseClientConnectedHandler(async e =>
{
Console.WriteLine("客户端连接-----");
Console.WriteLine("客户端ID:" + e.ClientId);
});
mqttServer.UseApplicationMessageReceivedHandler(async e =>
{
Console.WriteLine("服务器端接收到信息");
Console.WriteLine("topic:" + e.ApplicationMessage.Topic);
Console.WriteLine("payload:" + Encoding.UTF8.GetString(e.ApplicationMessage.Payload));
});
mqttServer.UseClientDisconnectedHandler(async e =>
{
Console.WriteLine("客户端断开连接");
Console.WriteLine("客户端信息clientid:" + e.ClientId);
});
Console.ReadLine();
}
}
}