mirror of
https://github.com/zhaopeiym/IoTClient
synced 2025-10-19 22:14:31 +08:00
184 lines
6.2 KiB
C#
184 lines
6.2 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|