namespace MQTT
{
public partial class Form1 : Form
{
private IMqttClient mqttClient;
private IMqttClient mqttClient1;
public Form1()
{
InitializeComponent();
var mqttFactory = new MqttFactory();
mqttClient = mqttFactory.CreateMqttClient();
var mqttFactory1 = new MqttFactory();
mqttClient1 = mqttFactory1.CreateMqttClient();
}
TcpListener listener = new TcpListener(IPAddress.Any, 18888);
private async void ConnectToMqttServer()
{
var mqttClientOptions = new MqttClientOptionsBuilder()
.WithClientId($"WinForm_{Guid.NewGuid()}")
.WithTcpServer("123.232.107.150", 1883)
.WithCredentials("test", "qE.8qygD?'i;G?k")// 替换为你的MQTT服务器地址和端口
.WithCleanSession(false)
.WithKeepAlivePeriod(TimeSpan.FromSeconds(60))
.Build();
await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None);
}
private async void ConnectToMqttServer1()
{
var mqttClientOptions = new MqttClientOptionsBuilder()
.WithClientId($"WinForm_{Guid.NewGuid()}")
.WithTcpServer("hddff06f.ala.cn-hangzhou.emqxsl.cn", 8883)
.WithCredentials("test", "test")// 替换为你的MQTT服务器地址和端口
.WithCleanSession(false)
.WithKeepAlivePeriod(TimeSpan.FromSeconds(60))
.WithTlsOptions(new MqttClientTlsOptions
{
UseTls = true,
SslProtocol = System.Security.Authentication.SslProtocols.Tls12, // 指定协议版本
CertificateValidationHandler = (certContext) =>
{
// 自定义证书验证逻辑(生产环境需严格验证)
//return true; // 测试时可跳过验证
return certContext.Chain.Build((X509Certificate2)certContext.Certificate);
}
})
.Build();
await mqttClient1.ConnectAsync(mqttClientOptions, CancellationToken.None);
}
private async void SendMessage()
{
//ConnectToMqttServer();
//Thread.Sleep(5000);
if (mqttClient.IsConnected)
{
using (SqlConnection con = new SqlConnection("server=10.104.229.10;user=nmjxxzx;pwd=NMJ[xxzx5902768];database=shuiqin;"))
{
try
{
con.Open();
DataTable dataTable = new DataTable();
SqlCommand sqlCommand = new SqlCommand("select sbno,dt,shuiwei from czshuiwei where dt>'" + DateTime.Now.AddMinutes(-30).ToString("yyyy-MM-dd HH:mm:0") + "' and dt<='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:0") + "' order by dt asc", con);
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
sqlDataAdapter.Fill(dataTable);
for (int i = 0; i < dataTable.Rows.Count; i++)
{
string mess = JsonConvert.SerializeObject(new { STCD = dataTable.Rows[i][0], DMBH = dataTable.Rows[i][0] + "0", DMMC = dataTable.Rows[i][0] + "0", TM = dataTable.Rows[i][1], Z = dataTable.Rows[i][2] });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/z") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
dataTable = new DataTable();
SqlCommand sqlCommand1 = new SqlCommand("select STCD,SNDT,WAT,FlUX,WV,WS,V1 from ST_FDATA_B where SNDT>'" + DateTime.Now.AddMinutes(-30).ToString("yyyy-MM-dd HH:mm:0") + "' and SNDT<='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:0") + "' and stcd='40102100' order by SNDT asc", con);
SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter(sqlCommand1);
sqlDataAdapter1.Fill(dataTable);
for (int i = 0; i < dataTable.Rows.Count; i++)
{
string v2 = null, v3 = null, v4 = null, v5 = null, v6 = null, v7 = null, v8 = null, v9 = null, v10 = null, di1 = null, di2 = null, di3 = null, di4 = null, di5 = null, di6 = null, di7 = null, di8 = null, di9 = null, di10 = null;
string mess = JsonConvert.SerializeObject(new { STCD = dataTable.Rows[i][0], STNM = "青铜峡", TM = dataTable.Rows[i][1], XSNM = dataTable.Rows[i][0] + "0", Z = dataTable.Rows[i][2], Q = dataTable.Rows[i][3], xsavv = dataTable.Rows[i][4], xstta = dataTable.Rows[i][5], v1 = dataTable.Rows[i][6], v2, v3, v4, v5, v6, v7, v8, v9, v10, di1, di2, di3, di4, di5, di6, di7, di8, di9, di10 });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/q") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
dataTable = new DataTable();
SqlCommand sqlCommand2 = new SqlCommand("select stcd,tm,ed from st_ed_r where tm>'" + DateTime.Now.AddMinutes(-30).ToString("yyyy-MM-dd HH:mm:0") + "' and tm<='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:0") + "' order by tm asc", con);
SqlDataAdapter sqlDataAdapter2 = new SqlDataAdapter(sqlCommand2);
sqlDataAdapter2.Fill(dataTable);
if (dataTable.Rows.Count > 0)
{
for (int i = 0; i < dataTable.Rows.Count; i++)
{
if (dataTable.Rows[i][0].ToString() == "40102102")
{
string mess = JsonConvert.SerializeObject(new { STCD = "40102100", TM = dataTable.Rows[i][1], STNM = "青铜峡水文站", evas = dataTable.Rows[i][2], bj = "E601" });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/e") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
else if (dataTable.Rows[i][0].ToString() == "40102650")
{
string mess = JsonConvert.SerializeObject(new { STCD = "40102650", TM = dataTable.Rows[i][1], STNM = "巴彦高勒水文站", evas = dataTable.Rows[i][2], bj = "E601" });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/e") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
else if (dataTable.Rows[i][0].ToString() == "40544700")
{
string mess = JsonConvert.SerializeObject(new { STCD = "40103050", TM = dataTable.Rows[i][1], STNM = "三湖河口水文站", evas = dataTable.Rows[i][2], bj = "E601" });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/e") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
else if (dataTable.Rows[i][0].ToString() == "40549700")
{
string mess = JsonConvert.SerializeObject(new { STCD = "40103400", TM = dataTable.Rows[i][1], STNM = "头道拐水文站", evas = dataTable.Rows[i][2], bj = "E601" });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/e") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
else if (dataTable.Rows[i][0].ToString() == "40539600")
{
string mess = JsonConvert.SerializeObject(new { STCD = "40102500", TM = dataTable.Rows[i][1], STNM = "头道拐水文站", evas = dataTable.Rows[i][2], bj = "E601" });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/e") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
}
}
dataTable = new DataTable();
SqlCommand sqlCommand3 = new SqlCommand("select stcd,tm,uc,us,atmp,mst,fl from ST_TMP_R where (tm>'" + DateTime.Now.AddMinutes(-30).ToString("yyyy-MM-dd HH:mm:0") + "' and tm<='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:0") + "') and (stcd='40102650' or stcd='40544700' or stcd='40549700' or stcd='40102102' or stcd='40520500'or stcd='40539600') order by tm asc", con);
SqlDataAdapter sqlDataAdapter3 = new SqlDataAdapter(sqlCommand3);
sqlDataAdapter3.Fill(dataTable);
//MessageBox.Show(dataTable.Rows[0][6].ToString());
for (int i = 0; i < dataTable.Rows.Count; i++)
{
if (dataTable.Rows[i][0].ToString() == "40102650")
{
string RAIN = null, MAXTEM = null, MINTEM = null, DEWTEM = null;
string mess = JsonConvert.SerializeObject(new { STCD = "40102650", STNM = "巴彦高勒水文站", TM = dataTable.Rows[i][1], WINDIR = dataTable.Rows[i][2], WINSPE = dataTable.Rows[i][3], RAIN, AMBTEM = dataTable.Rows[i][4], MAXTEM, MINTEM, AMBHUM = dataTable.Rows[i][5], DEWTEM, AIRPRE = dataTable.Rows[i][6] });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/phe") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
else if (dataTable.Rows[i][0].ToString() == "40544700")
{
string RAIN = null, MAXTEM = null, MINTEM = null, DEWTEM = null;
string mess = JsonConvert.SerializeObject(new { STCD = "40103050", STNM = "三湖河口水文站", TM = dataTable.Rows[i][1], WINDIR = dataTable.Rows[i][2], WINSPE = dataTable.Rows[i][3], RAIN, AMBTEM = dataTable.Rows[i][4], MAXTEM, MINTEM, AMBHUM = dataTable.Rows[i][5], DEWTEM, AIRPRE = dataTable.Rows[i][6] });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/phe") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
else if (dataTable.Rows[i][0].ToString() == "40549700")
{
string RAIN = null, MAXTEM = null, MINTEM = null, DEWTEM = null;
string mess = JsonConvert.SerializeObject(new { STCD = "40103400", STNM = "头道拐水文站", TM = dataTable.Rows[i][1], WINDIR = dataTable.Rows[i][2], WINSPE = dataTable.Rows[i][3], RAIN, AMBTEM = dataTable.Rows[i][4], MAXTEM, MINTEM, AMBHUM = dataTable.Rows[i][5], DEWTEM, AIRPRE = dataTable.Rows[i][6] });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/phe") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
else if (dataTable.Rows[i][0].ToString() == "40102102")
{
string RAIN = null, MAXTEM = null, MINTEM = null, DEWTEM = null;
string mess = JsonConvert.SerializeObject(new { STCD = "40102100", STNM = "青铜峡水文站", TM = dataTable.Rows[i][1], WINDIR = dataTable.Rows[i][2], WINSPE = dataTable.Rows[i][3], RAIN, AMBTEM = dataTable.Rows[i][4], MAXTEM, MINTEM, AMBHUM = dataTable.Rows[i][5], DEWTEM, AIRPRE = dataTable.Rows[i][6] });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/phe") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
else if (dataTable.Rows[i][0].ToString() == "40520500")
{
string RAIN = null, MAXTEM = null, MINTEM = null, DEWTEM = null;
string mess = JsonConvert.SerializeObject(new { STCD = "40101750", STNM = "下河沿水文站", TM = dataTable.Rows[i][1], WINDIR = dataTable.Rows[i][2], WINSPE = dataTable.Rows[i][3], RAIN, AMBTEM = dataTable.Rows[i][4], MAXTEM, MINTEM, AMBHUM = dataTable.Rows[i][5], DEWTEM, AIRPRE = dataTable.Rows[i][6] });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/phe") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
else if (dataTable.Rows[i][0].ToString() == "40539600")
{
string RAIN = null, MAXTEM = null, MINTEM = null, DEWTEM = null;
string mess = JsonConvert.SerializeObject(new { STCD = "40102500", STNM = "石嘴山水文站", TM = dataTable.Rows[i][1], WINDIR = dataTable.Rows[i][2], WINSPE = dataTable.Rows[i][3], RAIN, AMBTEM = dataTable.Rows[i][4], MAXTEM, MINTEM, AMBHUM = dataTable.Rows[i][5], DEWTEM, AIRPRE = dataTable.Rows[i][6] });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/phe") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
}
dataTable.Clear(); dataTable.Dispose();
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
finally
{
con.Close();
}
}
using (SqlConnection con = new SqlConnection("server=10.104.229.16;user=sw;pwd=Swj159753!;database=CSea;"))
{
try
{
con.Open();
SqlCommand sqlCommand = new SqlCommand("select MSGCONTENT from SQ_RECE_S where MSGCONTENT like '%PN30%' and tm>'" + DateTime.Now.AddMinutes(-30).ToString("yyyy-MM-dd HH:mm:0") + "' and tm<='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:0") + "' order by tm asc", con);
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
DataTable dataTable = new DataTable();
sqlDataAdapter.Fill(dataTable);
Regex rg1 = new Regex("(?<=(PN30 ))[.\\s\\S]*?(?=(\\s))", RegexOptions.Multiline | RegexOptions.Singleline);
Regex rg = new Regex("(?<=(PD ))[.\\s\\S]*?(?=(\\s))", RegexOptions.Multiline | RegexOptions.Singleline);
Regex rg2 = new Regex("(?<=(H ))[.\\s\\S]*?(?=(\\s))", RegexOptions.Multiline | RegexOptions.Singleline);
if (dataTable.Rows.Count > 0)
{
for (int i = 0; i < dataTable.Rows.Count; i++)
{
string zhanhao = rg2.Match(dataTable.Rows[i][0].ToString()).Value;
string sanshi = rg1.Match(dataTable.Rows[i][0].ToString()).Value;
if (DateTime.Now.Hour == 8 && DateTime.Now.Minute < 10)
{
string ryl = rg.Match(dataTable.Rows[i][0].ToString()).Value;
string DRP = null;
string mess = JsonConvert.SerializeObject(new { STCD = zhanhao, TM = DateTime.Now.ToString("yyyy-MM-dd HH:0:0"), DRP, PN30 = sanshi, INTV = "30", DYP = ryl });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/pp") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
else
{
string DRP = null, DYP = null;
string mess = JsonConvert.SerializeObject(new { STCD = zhanhao, TM = DateTime.Now.ToString("yyyy-MM-dd HH:0:0"), DRP, PN30 = sanshi, INTV = "30", DYP });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/pp") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
}
}
else
{
string[] zh = { "40102100", "40101750", "40102500", "40102650", "40103050", "40103180", "40103400" };
for (int i = 0; i < zh.Length; i++)
{
string DRP = null, DYP = null;
string mess = JsonConvert.SerializeObject(new { STCD = zh[i], TM = DateTime.Now.ToString("yyyy-MM-dd HH:0:0"), DRP, PN30 = "0.0", INTV = "30", DYP });
var message = new MqttApplicationMessageBuilder()
.WithTopic("hydro/nm/pp") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
}
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
finally { con.Close(); }
}
label4.Invoke(new Action(() => {
label4.Text =DateTime.Now + "已发送成功"; label4.Font = new Font("黑体", 12);
label4.BackColor = Color.Green;
}));
}
else
{
try
{
ConnectToMqttServer();
await Task.Delay(10000);
SendMessage();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
//await mqttClient.DisconnectAsync(); // 发送 DISCONNECT
//mqttClient.Dispose(); // 释放资源
// 置空对象
//MessageBox.Show("发送成功123");
}
private void Form1_Load(object sender, EventArgs e)
{
ConnectToMqttServer();
ConnectToMqttServer1();
listener.Start();
label4.Text = "未发送"; label4.Font = new Font("黑体", 12);
label5.Text = "未发送"; label5.Font = new Font("黑体", 12);
label6.Text = "未发送"; label6.Font = new Font("黑体", 12);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
using (SqlConnection con = new SqlConnection("server=;database=shuiqin;Integrated Security=True"))
{
try
{
con.Open();
TcpClient client = listener.AcceptTcpClient();
using (NetworkStream stream = client.GetStream())
{
byte[] buffer = new byte[1024];
int bytesRead;
StringBuilder messageBuilder = new StringBuilder();
string jssj = "";
// 持续接收数据,直到客户端断开连接
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
{
// 将接收到的字节转换为字符串
string receivedData = Encoding.UTF8.GetString(buffer, 0, bytesRead);
jssj += receivedData;
}
string[] cr = Regex.Split(jssj, ",");
for (int i = 0; i < cr.Length - 1; i += 3)
{
SqlCommand command = new SqlCommand("insert into czshuiwei(sbno,dt,shuiwei) values('" + cr[i] + "','" + cr[i + 1] + "','" + cr[i + 2] + "')", con);
command.ExecuteNonQuery();
}
}
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
finally { con.Close(); }
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if ((DateTime.Now.Minute == 33 && DateTime.Now.Second == 0) || (DateTime.Now.Minute == 3 && DateTime.Now.Second == 0))
{
SendMessage();
}
if (DateTime.Now.Minute % 6 == 0 && DateTime.Now.Second == 0)
{
timer3.Enabled = true;
//timer4.Enabled = true;
}
}
private void button2_Click_1(object sender, EventArgs e)
{
SendMessage();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
}
private void timer2_Tick(object sender, EventArgs e)
{
if (!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync();
}
}
private void backgroundWorker3_DoWork(object sender, DoWorkEventArgs e)
{
using (SqlConnection con = new SqlConnection("server=;database=shuiqin;Integrated Security=True"))
{
try { con.Open();
if (mqttClient1.IsConnected) {
SqlCommand sqlCommand = new SqlCommand("select top 1 dt,shuiwei from shuiwei where sbno='1040510350' and dt>'" + DateTime.Now.AddMinutes(-6).ToString("yyyy-MM-dd HH:mm:0") + "' and dt <='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:0") + "' order by dt desc", con);
DataTable dt = new DataTable();
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
sqlDataAdapter.Fill(dt);
if (dt.Rows.Count > 0)
{
string mess = "H 40510350 T " + dt.Rows[0][0] +" Z " + dt.Rows[0][1] +" NN";
var message = new MqttApplicationMessageBuilder()
.WithTopic("ToPlatform/waterLevel") // 替换为你的主题名
.WithPayload(mess) // 发送的消息内容
.Build();
mqttClient1.PublishAsync(message, CancellationToken.None);
timer3.Enabled = false;
label5.Invoke(new Action(() => {
label5.Text = dt.Rows[0][0] + "已发送成功"; label5.Font = new Font("黑体", 12);
label5.BackColor = Color.Green;
}));
}
}
else
{
ConnectToMqttServer1();
Thread.Sleep(10000);
}
} catch(Exception ex) { MessageBox.Show(ex.ToString()); }finally { con.Close(); }
}
}
private void timer3_Tick(object sender, EventArgs e)
{
if (!backgroundWorker3.IsBusy)
{
backgroundWorker3.RunWorkerAsync();
}
}
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
using (SqlConnection con = new SqlConnection("server=;database=shuiqin;Integrated Security=True"))
{
try
{
con.Open();
SqlCommand sqlCommand = new SqlCommand("select top 1 dt,shuiwei from shuiwei where sbno='1000100200' and dt>'" + DateTime.Now.AddMinutes(-6).ToString("yyyy-MM-dd HH:mm:0") + "' and dt <='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:0") + "' order by dt desc", con);
DataTable dt = new DataTable();
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
sqlDataAdapter.Fill(dt);
if (dt.Rows.Count > 0)
{
TcpClient client = new TcpClient("182.92.175.121", 8897);
NetworkStream stream = client.GetStream();
byte[] soh = new byte[] { 0x01 }; // SOH (0x01)
byte[] stx = new byte[] { 0x02 }; // STX (0x02)
byte[] stx1 = new byte[] { 0x03 }; // STX (0x02)
byte[] payload1 = Encoding.ASCII.GetBytes("FF00401031511A0A320040");
string xuhao = "";
if (Convert.ToDecimal(ConfigurationManager.AppSettings["geshu"]) < 10)
{
xuhao = "000" + ConfigurationManager.AppSettings["geshu"];
}
else if (Convert.ToDecimal(ConfigurationManager.AppSettings["geshu"]) >= 10 && Convert.ToDecimal(ConfigurationManager.AppSettings["geshu"]) < 100)
{
xuhao = "00" + ConfigurationManager.AppSettings["geshu"];
}
else if (Convert.ToDecimal(ConfigurationManager.AppSettings["geshu"]) >= 100 && Convert.ToDecimal(ConfigurationManager.AppSettings["geshu"]) < 1000)
{
xuhao = "0" + ConfigurationManager.AppSettings["geshu"];
}
else if (Convert.ToDecimal(ConfigurationManager.AppSettings["geshu"]) >= 1000 && Convert.ToDecimal(ConfigurationManager.AppSettings["geshu"]) <= 9999)
{
xuhao = ConfigurationManager.AppSettings["geshu"];
}
byte[] payload2 = Encoding.ASCII.GetBytes(xuhao+"" +DateTime.Now.ToString("yy")+ DateTime.Now.ToString("MM")+DateTime.Now.ToString("dd")+DateTime.Now.ToString("HH")+ DateTime.Now.ToString("mm")+ DateTime.Now.ToString("ss")+ "ST 0040103151 H TT " +Convert.ToDateTime( dt.Rows[0][0]).ToString("yy")+ Convert.ToDateTime(dt.Rows[0][0]).ToString("MM")+ Convert.ToDateTime(dt.Rows[0][0]).ToString("dd")+ Convert.ToDateTime(dt.Rows[0][0]).ToString("HH")+ Convert.ToDateTime(dt.Rows[0][0]).ToString("mm") + " Z " + dt.Rows[0][1] +" VT 13.96");
byte[] bytes = soh.Concat(payload1).Concat(stx).Concat(payload2).Concat(stx1).ToArray();
StringBuilder hexBuilder = new StringBuilder();
foreach (char c in bytes)
{
// 将字符转为字节,再转为两位十六进制
string hexByte = Convert.ToByte(c).ToString("X2");
hexBuilder.Append(hexByte);
//hexBuilder.Append(" "); // 可选空格分隔
}
byte[] data = new byte[hexBuilder.Length / 2];
for (int i = 0; i < data.Length; i++)
{
int startIndex = i * 2;
string byteString = Convert.ToString(hexBuilder).Substring(startIndex, 2);
if (!byte.TryParse(byteString, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out data[i]))
{
throw new FormatException($"无效的十六进制字符: {byteString}");
}
}
ushort crc = 0xFFFF; // 初始值
foreach (byte b in data)
{
crc ^= b; // 与当前字节异或
// 处理每个位
for (int i = 0; i < 8; i++)
{
if ((crc & 0x0001) != 0) // 最低位为1
{
crc >>= 1; // 右移
crc ^= 0xA001; // 与多项式异或 (0x8005的反转)
}
else
{
crc >>= 1; // 直接右移
}
}
}
byte[] fasong = bytes.Concat(Encoding.ASCII.GetBytes(crc.ToString("X4"))).ToArray();
//int gs = 5;
//for (int i = 0; i < gs; i++)
//{
// byte[] data = Encoding.UTF8.GetBytes(i + "");
// //byte[] lengthHeader = BitConverter.GetBytes(data.Length);
// //stream.Write(lengthHeader, 0, 4);
stream.Write(fasong, 0, fasong.Length);
//}
stream.Close();
string configPath = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath;
// 加载配置文件
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(configPath);
// 查找appSettings节点
XmlNode node = xmlDoc.SelectSingleNode("//appSettings");
// 查找对应的key
XmlElement element = (XmlElement)node.SelectSingleNode($"add[@key='geshu']");
if (element != null)
{
// 存在则更新值
if (xuhao == "9999")
{
element.SetAttribute("value", "1");
}
else {
element.SetAttribute("value", Convert.ToString(Convert.ToDecimal(ConfigurationManager.AppSettings["geshu"]) + 1));
}
}
else
{
// 不存在则创建新节点
element = xmlDoc.CreateElement("add");
element.SetAttribute("key", "geshu");
element.SetAttribute("value", Convert.ToString(Convert.ToDecimal(ConfigurationManager.AppSettings["geshu"]) + 1));
node.AppendChild(element);
}
// 保存配置文件
xmlDoc.Save(configPath);
// 刷新配置,使修改立即生效
ConfigurationManager.RefreshSection("appSettings");
label6.Invoke(new Action(() => {
label6.Text = dt.Rows[0][0]+"已发送成功"; label6.Font = new Font("黑体", 12);
label6.BackColor = Color.Green;
}));
//string path = @"D:\MQTT日志.txt";
//string AppendText = xuhao + "" + DateTime.Now.ToString("yy") + DateTime.Now.ToString("MM") + DateTime.Now.ToString("dd") + DateTime.Now.ToString("HH") + DateTime.Now.ToString("mm") + DateTime.Now.ToString("ss") + "ST 0040103151 H TT " + Convert.ToDateTime(dt.Rows[0][0]).ToString("yy") + Convert.ToDateTime(dt.Rows[0][0]).ToString("MM") + Convert.ToDateTime(dt.Rows[0][0]).ToString("dd") + Convert.ToDateTime(dt.Rows[0][0]).ToString("HH") + Convert.ToDateTime(dt.Rows[0][0]).ToString("mm") + " Z " + dt.Rows[0][1] + " VT 13.96" + Environment.NewLine;
//File.AppendAllText(path, AppendText);
timer4.Enabled = false;
}
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
finally { con.Close(); }
}
}
private void timer4_Tick(object sender, EventArgs e)
{
//if (!backgroundWorker2.IsBusy)
//{
// backgroundWorker2.RunWorkerAsync();
//}
}
}
}
请解析以上代码