#记录与学习
1.NUGET-->mqttnet-->版本2.8
private IMqttClient mqttClient;
private void btn_Connect_Click(object sender, EventArgs e)
{
mqttClient = new MqttFactory().CreateMqttClient();
var option = new MqttClientOptions() { ClientId = Guid.NewGuid().ToString("D") };//ID
option.ChannelOptions = new MqttClientTcpOptions()
{
Server = this.txt_client_address.Text,
Port = Convert.ToInt32(this.txt_client_port.Text)
};
//验证
option.Credentials = new MqttClientCredentials()
{
Username = this.txt_cenlit_UserName.Text,
Password = this.txt_client_UserPwd.Text
};
option.CleanSession = true;
option.KeepAlivePeriod = TimeSpan.FromSeconds(100);
option.KeepAliveSendInterval = TimeSpan.FromSeconds(2000);
//事件
mqttClient.Connected += MqttClient_Connected;//链接事件
mqttClient.Disconnected += MqttClient_Disconnected;//断开事件
mqttClient.ApplicationMessageReceived += MqttClient_ApplicationMessageReceived;//消息事件
}
//断开
private void btn_DisConn_Click(object sender, EventArgs e)
{
if (mqttClient == null) return;
mqttClient.DisconnectAsync();
}
//消息事件
private void MqttClient_ApplicationMessageReceived(object sender, MqttApplicationMessageReceivedEventArgs e)
{
inLog1.AddLog(1, "接收服务器数据 ClientId:"+e.ClientId);
}
private void MqttClient_Disconnected(object sender,MQTTnet.Client.MqttClientDisconnectedEventArgs e)
{
clientTimer.Stop();
//bool stat = e.ClientWasConnected;//
try
{
if (e.ClientWasConnected)
{
inLog1.AddLog(1, "服务器或客户端下线 ClientWasConnected:" + e.ClientWasConnected);
}
else
{
inLog1.AddLog(1, "链接服务器失败 ClientWasConnected:" + e.ClientWasConnected);
}
}
catch (Exception ex)
{
inLog1.AddLog(2,ex.Message);
}
//链接失败||链接超时||服务端异常下线都会触发
//inLog1.AddLog(1, "链接失败||链接超时||服务端异常 ClientWasConnected:"+e.ClientWasConnected.ToString());
// inLog1.AddLog(1, "服务器链接失败 ClientWasConnected:"+e.ClientWasConnected+" Exception:" +e.Exception.Message);
}
private void MqttClient_Connected(object sender,MQTTnet.Client.MqttClientConnectedEventArgs e)
{
inLog1.AddLog(0,"服务器链接成功");
clientTimer.Start();
}
//订阅事件
private void ClientSend(string str)
{
try
{
inLog1.AddLog(0,"开始订阅");
var msg = new MqttApplicationMessage()
{
Topic = "测试",//主题
Payload = Encoding.Default.GetBytes(str),
QualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce,//次数
Retain = false
};
mqttClient.PublishAsync(msg);
}
catch (Exception ex)
{
inLog1.AddLog(2,"订阅失败 原因:"+ex.Message);
}
}