MQTT服务器及客户端功能说明
1、用VS开发工具创建基于.NetCore 的Winform项目工程注意创建的项目类型为Windows窗体应用。
2、采用NuGet添加引用MQTTnet在项目中的包右键,选择管理NuGet程序包
在搜索框中输入MQTTnet,本项目用的是MQTTnet2.8.2版本,你也可以选择适合自己的版本,选择好后安装即可。
3、设计MQTT操作页面可以创建个控制台应用程序,这样简单,但为了便于演示MQTT的操作及信息查看,我们创建了Winform界面程序,来实现MQTT服务。服务端界面设计如图
服务端上端为MQTT启动需要的参数,下侧为日志信息
客户端上端为MQTT启动需要的参数,中间为日志信息,下面为客户端发送数据。
4、MQTT服务器程序设计 界面设计完后,进行程序设计,MQTT服务器的程序设计主要包含:服务器对象初始化及启动,MQTT服务器事件注册及处理。其中事件主要有客户端连接及断开连接事件、接收客户端数据事件、发送消息、客户端topic订阅/取消订阅事件等。 部分代码贴出如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | //创建一个服务器对象 private IMqttServer mqttServer = null ; private string CurrentTime { get { return DateTime.Now.ToString( "HH:mm:ss" ); } } private AddLogDelegate AddLog; private void btn_Start_Click( object sender, EventArgs e) { //验证 if (mqttServer != null ) { return ; } //创建一个OptionBuilder var optionBuilder = new MqttServerOptionsBuilder(); optionBuilder.WithConnectionBacklog(10); optionBuilder.WithDefaultEndpointPort(Convert.ToInt32( this .txt_Port.Text)); optionBuilder.WithDefaultEndpointBoundIPAddress(IPAddress.Parse( this .cmb_IPList.Text)); mqttServer = new MqttFactory().CreateMqttServer(); //账号密码 MqttServerOptions option = optionBuilder.Build() as MqttServerOptions; //验证ID长度 option.ConnectionValidator += context => { if (context.ClientId.Length < 10) { context.ReturnCode = MqttConnectReturnCode.ConnectionRefusedIdentifierRejected; return ; } if (chk_IsUsePwd.Checked) { //验证账户和密码 if (context.Username != this .txt_UserName.Text) { context.ReturnCode = MqttConnectReturnCode.ConnectionRefusedBadUsernameOrPassword; return ; } if (context.Password != this .txt_Pwd.Text) { context.ReturnCode = MqttConnectReturnCode.ConnectionRefusedBadUsernameOrPassword; return ; } } context.ReturnCode = MqttConnectReturnCode.ConnectionAccepted; }; //绑定事件 mqttServer.ClientConnected += MqttServer_ClientConnected; mqttServer.ClientDisconnected += MqttServer_ClientDisconnected; mqttServer.ClientSubscribedTopic += MqttServer_ClientSubscribedTopic; mqttServer.ClientUnsubscribedTopic += MqttServer_ClientUnsubscribedTopic; mqttServer.ApplicationMessageReceived += MqttServer_ApplicationMessageReceived; mqttServer.Started += MqttServer_Started; mqttServer.Stopped += MqttServer_Stopped; mqttServer.StartAsync(option); } |
1 /// <summary> 2 /// 写入日志方法体 3 /// </summary> 4 /// <param name="index"></param> 5 /// <param name="info"></param> 6 private void AddLogMethod(int index, string info) 7 { 8 if (this.lstInfo.InvokeRequired) 9 { 10 this.lstInfo.Invoke(new Action(() => 11 { 12 ListViewItem lst = new ListViewItem(" " + CurrentTime, index); 13 14 lst.SubItems.Add(info); 15 16 lstInfo.Items.Insert(0, lst); 17 18 })); 19 20 } 21 else 22 { 23 ListViewItem lst = new ListViewItem(" " + CurrentTime, index); 24 25 lst.SubItems.Add(info); 26 27 lstInfo.Items.Insert(0, lst); 28 29 } 30 31 }
四、小结 以上介绍了MQTT服务器的设计过程,主要介绍了服务器程序设计的服务器对象初始化及启动,MQTT服务器事件注册及处理,发送数据三个环节。当然这只是比较简单的示例,但是通过该示例你可以掌握MQTT服务器程序设计最重要的几个环节,其余你就可以再此基础上进行扩展就可了。有需要源码的同学可以留言索要。
分类:
基于C#实现物联网MQTT通信
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具