大家好,又见面了,我是你们的朋友全栈君。
Install-Package MQTTNET
IMqttServer server = new MqttFactory().CreateMqttServer();
MqttServerOptionsBuilder serverOptions = new MqttServerOptionsBuilder();
serverOptions.WithDefaultEndpointPort(8080);
await server.StartAsync(serverOptions.Build());
server.StartedHandler = new MqttServerStartedHandlerDelegate(StartedHandler);
/// <summary>
/// MQTT启动服务器事件
/// </summary>
/// <param name="obj"></param>
private void StartedHandler(EventArgs obj)
{
Console.WriteLine($"程序已经启动!监听端口为:{model.Port}");
}
server.StoppedHandler = new MqttServerStoppedHandlerDelegate(StoppedHandler);
/// <summary>
/// MQTT服务器停止事件
/// </summary>
/// <param name="obj"></param>
private void StoppedHandler(EventArgs obj)
{
Console.WriteLine("程序已经关闭");
}
//客户端连接事件
server.ClientConnectedHandler = new MqttServerClientConnectedHandlerDelegate(ClientConnectedHandler);
/// <summary>
/// 客户端连接到服务器事件
/// </summary>
/// <param name="obj"></param>
private void ClientConnectedHandler(MqttServerClientConnectedEventArgs obj)
{
throw new NotImplementedException();
}
server.UseClientConnectedHandler(args =>
{
Console.WriteLine($"{args.ClientId}此客户端已经连接到服务器");
});
//客户端断开连接事件
server.ClientDisconnectedHandler = new MqttServerClientDisconnectedHandlerDelegate(ClientDisconnectedHandler);
private void ClientDisconnectedHandler(MqttServerClientDisconnectedEventArgs obj)
{
Console.WriteLine($"断开连接的客户端:{obj.ClientId}");
Console.WriteLine($"断开连接类型:{obj.DisconnectType.ToString()}");
}
server.UseClientDisconnectedHandler(args => {
Console.WriteLine($"断开连接的客户端:{args.ClientId}");
Console.WriteLine($"断开连接类型:{args.DisconnectType.ToString()}");
});
server.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(MessageReceivedHandler);
/// <summary>
/// 收到各个客户端发送的消息
/// </summary>
/// <param name="obj"></param>
private void MessageReceivedHandler(MqttApplicationMessageReceivedEventArgs obj)
{
Console.WriteLine("===================================================");
Console.WriteLine("收到消息:");
Console.WriteLine($"客户端:{obj.ClientId}");
Console.WriteLine($"主题:{obj.ApplicationMessage.Topic}");
Console.WriteLine($"消息:{Encoding.UTF8.GetString(obj.ApplicationMessage.Payload)}");
Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++++++++++");
Console.WriteLine();
}
server.UseApplicationMessageReceivedHandler(args=>{
Console.WriteLine("===================================================");
Console.WriteLine("收到消息:");
Console.WriteLine($"客户端:{args.ClientId}");
Console.WriteLine($"主题:{args.ApplicationMessage.Topic}");
Console.WriteLine($"消息:{Encoding.UTF8.GetString(args.ApplicationMessage.Payload)}");
Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++++++++++");
Console.WriteLine();
});
IMqttServer server = new MqttFactory().CreateMqttServer();
MqttServerOptionsBuilder serverOptions = new MqttServerOptionsBuilder();
serverOptions.WithConnectionValidator(client => {
string Account = client.Username;
string PassWord = client.Password;
string clientid = client.ClientId;
if (Account == "test" && PassWord == "1234")
{
client.ReasonCode = MqttConnectReasonCode.Success;
Console.WriteLine("校验成功");
}
else
{
client.ReasonCode = MqttConnectReasonCode.BadUserNameOrPassword;
Console.WriteLine("校验失败");
}
});
await server.StartAsync(serverOptions.Build());
//客户端订阅主题事件
server.ClientSubscribedTopicHandler = new MqttServerClientSubscribedHandlerDelegate(ClientSubscribedTopicHandler);
/// <summary>
/// 客户端订阅的主题
/// </summary>
/// <param name="obj"></param>
private void ClientSubscribedTopicHandler(MqttServerClientSubscribedTopicEventArgs obj)
{
Console.WriteLine($"客户端:{obj.ClientId}");
Console.WriteLine($"订阅主题:{obj.TopicFilter.Topic}");
}
//客户端取消订阅主题事件
server.ClientUnsubscribedTopicHandler = new MqttServerClientUnsubscribedTopicHandlerDelegate(ClientUnsubscribedTopicHandler);
/// <summary>
/// 客户端取消订阅主题
/// </summary>
/// <param name="obj"></param>
private void ClientUnsubscribedTopicHandler(MqttServerClientUnsubscribedTopicEventArgs obj)
{
Console.WriteLine($"客户端:{obj.ClientId}");
Console.WriteLine($"取消订阅主题:{obj.TopicFilter}");
}
public async Task StopAsync()
{
if (server != null)
{
if (server.IsStarted)
{
await server.StopAsync();
server.Dispose();
}
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152895.html原文链接:https://javaforall.cn