用C#写一个基于mqtt协议的上位机
软件环境:VS2022。
·
软件环境:VS2022
窗体界面,做的比较粗糙,重点记录过程!
1.新建项目
一般这种软件的路径最好不要有中文路径
直接创建即可,这个版本的vs比之前的版本要精简很多。
2.布置所需控件
控件的布局可以根据自己的需求去设置,遇到控件的使用建议通过AI软件直接搜索,比较简单。窗体布局参考下图,直接从左边的”工具箱“拖动到”Form1.cs[设计]“即可。常用的几种控件。
3.重要代码
添加依赖库,右键 解决方案资源管理器的项目名称,选择”管理NuGet程序包(N)“,在弹出的界面搜索关键字”MQTT“,在搜索结果中选择下图橙色框 下载即可。
下载完毕后,就可以在依赖项-》包 中看到:
然后在”Form1.cs“的第一行插入以下代码:
using System;
using System.Windows.Forms;
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;
添加服务器相关变量
// MQTT 客户端实例
private MqttClient mqttClient = null;
// MQTT 服务器地址
private string mqttBrokerAddress = "**.**.***.***";
// MQTT 服务器端口
private int mqttBrokerPort = 1883;
(1)连接服务器、数据处理
在”Form1.cs“中添加mqtt的连接和接收处理函数
private void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
// 接收到消息时触发此事件
string message = System.Text.Encoding.UTF8.GetString(e.Message);
// 更新 UI 显示接收到的消息
UpdateReceivedData(message);
}
private void UpdateReceivedData(string message)
{
// 由于消息接收事件在后台线程中触发,需要使用 Invoke 方法更新 UI
if (this.label4.InvokeRequired)
{
this.label4.Invoke(new Action<string>(UpdateReceivedData), new object[] { message });
}
else
{
//接收到的数据进行处理、显示,这部分代码根据自己需求更改即可
if (checkBox1.Checked)
this.label4.Text = $" {message.Substring(0, 4)}";
}
}
(2)button控件处理
双击”Form1.cs[设计]“中的”连接“按钮,就会生成对应按钮的处理函数,函数的内容:
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text.Length != 0)
{
// 创建 MQTT 客户端实例
mqttClient = new MqttClient(mqttBrokerAddress, mqttBrokerPort, false, null, null, MqttSslProtocols.None);
// 注册消息接收事件
mqttClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
// 生成客户端 ID 并连接到 MQTT 服务器
string clientId = Guid.NewGuid().ToString();
mqttClient.Connect(clientId);
topic = textBox1.Text;
// 订阅主题
mqttClient.Subscribe(new string[] { textBox1.Text }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE });
label12.Text = "连接成功" + " " + textBox1.Text;
}
else
MessageBox.Show("订阅主题不能为空");
}
其中textBox1为订阅主题的获取,如果订阅主题固定可以在程序”textBox1.Text“的位置直接替换为字符串,如订阅主题为”topic“,则上面代码替换为以下:
mqttClient.Subscribe(new string[] { "Topic" }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE });
是否连接成功可通过EMQX Dashboard查看:
重复上面过程,为”断开“按钮添加处理事件
private void button2_Click(object sender, EventArgs e)
{
if ((textBox1.Text.Length != 0) && (topic == textBox1.Text))
{
// 取消订阅
mqttClient.Unsubscribe(new string[] { textBox1.Text });
// 断开连接
mqttClient.Disconnect();
label12.Text = "已断开连接";
}
else
{
MessageBox.Show("订阅主题已更改");//断开连接 主题不能更改限制
}
}
断开连接测试,刚才的连接已经消失,代表成功!
上面内容只是MQTT的连接和断开,相当于路是通了,控件的处理还是要单独处理呀!AI起来非常简单.....
更多推荐
所有评论(0)