iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#如何实现MQTT服务端与客户端通讯功能
  • 681
分享到

C#如何实现MQTT服务端与客户端通讯功能

2023-06-29 00:06:55 681人浏览 安东尼
摘要

这期内容当中小编将会给大家带来有关C#如何实现MQTT服务端与客户端通讯功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。关于MQtTMQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 2

这期内容当中小编将会给大家带来有关C#如何实现MQTT服务端与客户端通讯功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

关于MQtT

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 tcp/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网ioT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

MQTT示例

注: 该示例演示统一使用WPF, 简单MVVM模式演示, 需注意引用 NuGet包 GalaSoft

MQTT服务端建立:

演示界面:

C#如何实现MQTT服务端与客户端通讯功能

演示代码:

public class MainViewModel : ViewModelBase    {        /// <summary>        /// Initializes a new instance of the MainViewModel class.        /// </summary>        public MainViewModel()        {            ClientInsTances = new ObservableCollection<ClientInstance>();        }        IMqttServer mqttServer;  //MQTT服务端实例        string message;         /// <summary>        /// 消息   用于界面显示        /// </summary>        public string Message        {            get { return message; }            set { message = value; RaisePropertyChanged(); }        }        ObservableCollection<ClientInstance> clientInstances; //客户端登陆缓存信息        /// <summary>        /// 客户端实例        /// </summary>        public ObservableCollection<ClientInstance> ClientInsTances        {            get { return clientInstances; }            set { clientInstances = value; RaisePropertyChanged(); }        }     //开启MQTT服务        public void OpenMqttServer()        {            mqttServer = new MqttFactory().CreateMqttServer();            var options = new MqttServerOptions();            //拦截登录            options.ConnectionValidator = c =>            {                try                {                    Message += string.FORMat("用户尝试登录:用户ID:{0}\t用户信息:{1}\t用户密码:{2}", c.ClientId, c.Username, c.PassWord) + "\r\n";                    if (string.IsNullOrWhiteSpace(c.Username))                    {                        Message += string.Format("用户:{0}登录失败,用户信息为空", c.ClientId) + "\r\n";                        c.ReturnCode = MQTTnet.Protocol.MqttConnectReturnCode.ConnectionRefusedBadUsernameOrPassword;                        return;                    }                    //解析用户名和密码,这个地方需要改成查找我们自己创建的用户名和密码。                    if (c.Username == "admin" && c.Password == "123456")                    {                        c.ReturnCode = MqttConnectReturnCode.ConnectionAccepted;                        Message += c.ClientId + " 登录成功" + "\r\n";                        ClientInsTances.Add(new ClientInstance()                        {                            ClientID = c.ClientId,                            UserName = c.Username,                            PassWord = c.Password                        });                        return;                    }                    else                    {                        c.ReturnCode = MqttConnectReturnCode.ConnectionRefusedBadUsernameOrPassword;                        Message += "用户名密码错误登陆失败" + "\r\n";                        return;                    }                }                catch (Exception ex)                {                    Console.WriteLine("登录失败:" + ex.Message);                    c.ReturnCode = MqttConnectReturnCode.ConnectionRefusedIdentifierRejected;                    return;                }            };            //拦截订阅            options.SubscriptionInterceptor = async context =>            {                try                {                    Message += "用户" + context.ClientId + "订阅" + "\r\n";                }                catch (Exception ex)                {                    Console.WriteLine("订阅失败:" + ex.Message);                    context.AcceptSubscription = false;                }            };            //拦截消息            options.ApplicationMessageInterceptor = context =>            {                try                {                    //一般不需要处理消息拦截                    // Console.WriteLine(Encoding.UTF8.GetString(context.ApplicationMessage.Payload));                }                catch (Exception ex)                {                    Console.WriteLine("消息拦截:" + ex.Message);                }            };            mqttServer.ClientDisconnected += ClientDisconnected;            mqttServer.ClientConnected += MqttServer_ClientConnected;            mqttServer.Started += MqttServer_Started;            mqttServer.StartAsync(options);        }        private void MqttServer_Started(object sender, EventArgs e)        {            Message += "消息服务启动成功:任意键退出" + "\r\n";        }        private void MqttServer_ClientConnected(object sender, MqttClientConnectedEventArgs e)        {            //客户端链接            Message += e.ClientId + "连接" + "\r\n";        }        private void ClientDisconnected(object sender, MqttClientDisconnectedEventArgs e)        {            //客户端断开            Message += e.ClientId + "断开" + "\r\n";        }        /// <summary>        /// 客户端推送信息    -  用于测试服务推送        /// </summary>        /// <param name="clientID"></param>        /// <param name="message"></param>        public void SendMessage(string clientID, string message)        {            mqttServer.PublishAsync(new MqttApplicationMessage            {                Topic = clientID,                QualityOfServiceLevel = MqttQualityOfServiceLevel.ExactlyOnce,                Retain = false,                Payload = Encoding.UTF8.GetBytes(message),            });        }    }

添加MQTT 客户端登陆实例, 用于保存客户的登陆信息,如下:

演示界面:

    /// <summary>    /// 登陆客户端信息    /// </summary>    public class ClientInstance : ViewModelBase    {        private string clientID;        private string userName;        private string passWord;        /// <summary>        /// 识别ID        /// </summary>        public string ClientID        {            get { return clientID; }            set { clientID = value; RaisePropertyChanged(); }        }        /// <summary>        /// 账户        /// </summary>        public string UserName        {            get { return userName; }            set { userName = value; RaisePropertyChanged(); }        }        /// <summary>        /// 密码        /// </summary>        public string PassWord        {            get { return passWord; }            set { passWord = value; RaisePropertyChanged(); }        }    }

MQTT客户端建立:

演示代码:

public class MainViewModel : ViewModelBase    {        /// <summary>        /// Initializes a new instance of the MainViewModel class.        /// </summary>        public MainViewModel()        {            clientID = new Random().Next(999, 9999) + ""; //测试随机生成ClientID        }        IMqttClient mqttClient;  //MQTT客户端实例        string clientID; //机器ID        string message;        public string Message  //用于接收当前 消息        {            get { return message; }            set { message = value; RaisePropertyChanged(); }        }        //开启MQTT连接        public async void SignMqttServer()        {            var options = new MqttClientOptionsBuilder()             .WithClientId(clientID) //传递ClientID              .WithTcpServer("127.0.0.1", 1883)  //MQTT服务的地址             .WithCredentials("admin", "123456") //传递账号密码             .WithCleanSession()             .Build();            mqttClient = new MqttFactory().CreateMqttClient();// .CreateManagedMqttClient();            mqttClient.Connected += MqttClient_Connected;            mqttClient.Disconnected += MqttClient_Disconnected;            mqttClient.ApplicationMessageReceived += MqttClient_ApplicationMessageReceived; //创建消息接受事件            await mqttClient.ConnectAsync(options);            //await mqttClient.SubscribeAsync(clientID);        }        private void MqttClient_ApplicationMessageReceived(object sender, MqttApplicationMessageReceivedEventArgs e)        {            Message += "收到的信息:" + Encoding.UTF8.GetString(e.ApplicationMessage.Payload) + "\r\n";        }        private void MqttClient_Disconnected(object sender, MqttClientDisconnectedEventArgs e)        {            Message += "客户端断开";        }        private void MqttClient_Connected(object sender, MqttClientConnectedEventArgs e)        {            Message += "客户端已连接" + "\r\n";            mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic(clientID).Build()); //关联服务端订阅, 用于接受服务端推送信息        }    }

演示界面:

C#如何实现MQTT服务端与客户端通讯功能

实际演示效果(GIF)

C#如何实现MQTT服务端与客户端通讯功能

上述就是小编为大家分享的C#如何实现MQTT服务端与客户端通讯功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: C#如何实现MQTT服务端与客户端通讯功能

本文链接: https://www.lsjlt.com/news/321453.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#实现MQTT服务端与客户端通讯功能
    关于MQTT MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设...
    99+
    2022-11-13
  • C#如何实现MQTT服务端与客户端通讯功能
    这期内容当中小编将会给大家带来有关C#如何实现MQTT服务端与客户端通讯功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。关于MQTTMQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 2...
    99+
    2023-06-29
  • C#中如何实现服务端与客户端通信
    这篇文章将为大家详细讲解有关C#中如何实现服务端与客户端通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#服务端与客户端通信实现实例:class Server {&n...
    99+
    2023-06-17
  • C#中怎么实现服务端与客户端通信
    C#中怎么实现服务端与客户端通信,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C#服务端与客户端通信实现实例:TcpClient client;&nb...
    99+
    2023-06-17
  • mqtt服务器搭建与qt下的mqtt客户端实现
    一、mqtt介绍   MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简...
    99+
    2023-08-31
    服务器 qt 网络
  • 如何实现C#服务端与客户端连接
    今天就跟大家聊聊有关如何实现C#服务端与客户端连接,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#服务端与客户端连接实现的时间性:当服务器开始对端口侦听之后,便可以创建客户端与它建...
    99+
    2023-06-17
  • ​Golang 实现客户端与服务器端UDP协议连接通讯
    我们先说一下UDP的概念和作用 UDP是用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一...
    99+
    2023-06-04
  • Golang 实现客户端与服务器端UDP协议连接通讯
    我们先说一下UDP的概念和作用 UDP是用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一...
    99+
    2023-06-05
  • nodejs中如何实现socket服务端和客户端简单通信功能
    小编给大家分享一下nodejs中如何实现socket服务端和客户端简单通信功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!本文实例讲述了通过node.js的net模块实现nodejs s...
    99+
    2022-10-19
  • python客户端与服务器端通信怎么实现
    Python客户端与服务器端通信可以通过套接字(socket)实现。1. 服务器端首先需要创建一个套接字,并绑定到指定的IP地址和端...
    99+
    2023-09-08
    python 服务器
  • C#中怎么实现服务端与客户端连接
    这篇文章将为大家详细讲解有关C#中怎么实现服务端与客户端连接,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#服务端与客户端连接实现实例:class Client {&n...
    99+
    2023-06-17
  • python3实现ftp服务功能(客户端)
    本文实例为大家分享了python3实现ftp服务功能的具体代码,供大家参考,具体内容如下 客户端 main代码: #Author by Andy #_*_ coding:utf-8 _*_ ''' T...
    99+
    2022-06-04
    客户端 功能 ftp
  • 「Java」Socket实现简单的客户端和服务端通讯 | 公网环境通讯
    💛前情提要💛 本章节是番外篇的Socket的相关知识~ 接下来我们即将进入一个全新的空间,对代码有一个全新的视角~ 以下的内容一定会让你对Socket有一个颠覆性的认识哦!!! 以下内容干货满满,跟上步伐吧~...
    99+
    2023-08-18
    java 开发语言 spring boot 服务器
  • nodejs如何实现TCP服务器端和客户端聊天功能
    这篇文章主要介绍了nodejs如何实现TCP服务器端和客户端聊天功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:服务器端var&...
    99+
    2022-10-19
  • 客户端Socket与服务端ServerSocket串联实现网络通信
    目录引导语1、类属性2、初始化3、bind4、accept5、面试题5.1、说说你对Socket和ServerSocket的理解?5.2、说说对SocketOptions中的SO_T...
    99+
    2022-11-13
  • Android实现蓝牙客户端与服务器端通信示例
    一、首先说明:蓝牙通信必须用手机测试,因为avd里没有相关的硬件,会报错! 好了,看看最后的效果图:   二、概述: 1.判断是否支持Bluetooth ...
    99+
    2022-06-06
    客户端 服务器 示例 通信 服务器端 Android 蓝牙
  • nodejs socket实现的服务端和客户端功能示例
    本文实例讲述了nodejs socket实现的服务端和客户端功能。分享给大家供大家参考,具体如下: 使用node.js的net模块能很快的开发出基于TCP的服务端和客户端。直接贴代码。 server.js ...
    99+
    2022-06-04
    示例 服务端 客户端
  • nodejs中socket怎么实现服务端和客户端功能
    小编给大家分享一下nodejs中socket怎么实现服务端和客户端功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体如下:使用node.js的net模块能很快的开发出基于TCP的服务端...
    99+
    2022-10-19
  • vue中如何利用mqtt服务端实现即时通讯
    今天小编给大家分享一下vue中如何利用mqtt服务端实现即时通讯的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我...
    99+
    2022-10-19
  • vue中如何使用mqtt服务端实现即时通讯
    小编给大家分享一下vue中如何使用mqtt服务端实现即时通讯,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MQTT协议MQTT(Message Queuing T...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作