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订阅/取消订阅事件等。 部分代码贴出如下
//创建一个服务器对象
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服务器程序设计最重要的几个环节,其余你就可以再此基础上进行扩展就可了。有需要源码的同学可以留言索要。

浙公网安备 33010602011771号