using IoTClient.Common.Helpers; using System; using System.Linq; using System.Net; using System.Net.Sockets; using System.Windows.Forms; namespace IoTClient.Tool.Controls { public partial class OtherControl : UserControl { private Socket socketTcp; private UdpClient udpClient; public OtherControl() { InitializeComponent(); but_tcpclose.Enabled = false; but_tcpsend.Enabled = false; but_udpclose.Enabled = false; but_udpsend.Enabled = false; } private void but_crc16calculate_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txt_crcstr.Text) || txt_crcstr.Text.Trim().Replace(" ", "").Length % 2 != 0) { MessageBox.Show("请传入有效的参数"); return; } var byteArry = DataConvert.StringToByteArray(txt_crcstr.Text?.Trim(), false); var crc16 = CRC16.GetCRC16(byteArry); AppendText($"CRC16计算结果:{DataConvert.ByteArrayToString(crc16)}"); } private void AppendText(string content) { txt_content.Invoke((Action)(() => { txt_content.AppendText($"[{DateTime.Now.ToLongTimeString()}]{content}\r\n"); })); } private void but_crc16validation_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txt_crcstr.Text) || txt_crcstr.Text.Trim().Replace(" ", "").Length % 2 != 0) { MessageBox.Show("请传入有效的参数"); return; } var byteArry = DataConvert.StringToByteArray(txt_crcstr.Text?.Trim(), false); var checkCrc16 = CRC16.CheckCRC16(byteArry); AppendText($"CRC16验证结果:{txt_crcstr.Text} {checkCrc16}"); } private void label2_Click(object sender, EventArgs e) { } private void textBox2_TextChanged(object sender, EventArgs e) { } private void but_tcpOpen_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txt_tcpip.Text) || string.IsNullOrWhiteSpace(txt_tcpport.Text)) { MessageBox.Show("请传入有效的IP和端口"); return; } socketTcp?.Close(); socketTcp = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { socketTcp.SendTimeout = 1000 * 2; socketTcp.ReceiveTimeout = 1000 * 2; socketTcp.Connect(new IPEndPoint(IPAddress.Parse(txt_tcpip.Text?.Trim()), int.Parse(txt_tcpport.Text?.Trim()))); AppendText("打开连接成功"); but_tcpopen.Enabled = false; but_tcpclose.Enabled = true; but_tcpsend.Enabled = true; } catch (Exception ex) { } } private void but_tcpClose_Click(object sender, EventArgs e) { socketTcp?.Close(); AppendText("关闭连接成功"); but_tcpopen.Enabled = true; } private void but_tcpSend_Click(object sender, EventArgs e) { try { var command = DataConvert.StringToByteArray(txt_tcpmsg.Text, false); socketTcp.Send(command); var msg = SocketRead(socketTcp, 4096); AppendText(msg.ByteArrayToString()); } catch (Exception ex) { MessageBox.Show(ex.Message); //重新连接 socketTcp?.Close(); socketTcp.Connect(new IPEndPoint(IPAddress.Parse(txt_tcpip.Text?.Trim()), int.Parse(txt_tcpport.Text?.Trim()))); } } protected byte[] SocketRead(Socket socket, int receiveCount) { byte[] receiveBytes = new byte[receiveCount]; int receiveFinish = 0; var readLeng = socket.Receive(receiveBytes, receiveFinish, receiveCount, SocketFlags.None); if (readLeng == 0) { if (socket.Connected) socket.Shutdown(SocketShutdown.Both); socket.Close(); throw new Exception("连接已断开"); } return receiveBytes.Take(readLeng).ToArray(); } private void but_udpOpen_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txt_tcpip.Text) || string.IsNullOrWhiteSpace(txt_tcpport.Text)) { MessageBox.Show("请传入有效的IP和端口"); return; } try { udpClient = new UdpClient(); udpClient.Connect(new IPEndPoint(IPAddress.Parse(txt_udpip.Text?.Trim()), int.Parse(txt_udpport.Text?.Trim()))); AppendText("打开连接成功"); but_udpopen.Enabled = false; but_udpclose.Enabled = true; but_udpsend.Enabled = true; } catch (Exception ex) { AppendText("打开连接失败" + ex.Message); } } private void but_udpSend_Click(object sender, EventArgs e) { try { var command = DataConvert.StringToByteArray(txt_udpmsg.Text, false); udpClient.Send(command, command.Length); var ep = new IPEndPoint(IPAddress.Any, 0); var msg = udpClient.Receive(ref ep); AppendText(msg.ByteArrayToString()); } catch (Exception ex) { MessageBox.Show(ex.Message); udpClient?.Close(); udpClient.Connect(new IPEndPoint(IPAddress.Parse(txt_udpip.Text?.Trim()), int.Parse(txt_udpport.Text?.Trim()))); } } private void but_udpClose_Click(object sender, EventArgs e) { udpClient?.Close(); AppendText("关闭连接成功"); but_udpopen.Enabled = true; but_udpclose.Enabled = false; but_udpsend.Enabled = false; } } }