通信 两个 / 多个设备之间按照约定规则互相传递数据、交换信息。生活类比 两个人说话、打电话、发微信就是人际通信 电脑和单片机、电脑和另一台电脑、电脑和 PLC 传数据就是设备通信。核心就三件事有发送方把数据发出去有接收方把数据收下来遵守统一规则格式、速率、编码、指令必须一致否则 “听不懂”一、一句话记住 5 种通信通信名称一句话理解用途串口通信电脑 ↔ 硬件传感器、PLC、单片机有线工业设备、五插针、单片机UDP 通信局域网发消息不连接直接发快、广播、数据透传TCP 通信先连接再收发稳定不丢包聊天、文件、远程控制Socket 通信TCP/UDP 的底层统称所有网络通信的基础Modbus 通信工业设备标准协议PLC、传感器、仪表读写二、最核心区别串口有线、点对点UDP无连接、不可靠、快TCP有连接、可靠、慢一点Socket网络通信的接口Modbus工业设备对话规则三、5 种通信完整 WinForm 代码示例1. 串口通信SerialPort最常用电脑 ↔ 五插针 / 传感器 / PLC// 打开串口 SerialPort sp new SerialPort(); sp.PortName COM7; sp.BaudRate 9600; sp.Open(); // 发送数据 private void btnSend_Click(object sender, EventArgs e) { sp.Write(Hello); } // 接收数据 private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { string str sp.ReadExisting(); Invoke(new Action(() { richTextBox1.AppendText(str \r\n); })); }2. UDP 通信无连接直接发不需要连接谁都能收速度最快UdpClient udpServer new UdpClient(10000); // 接收 private void ReceiveUDP() { Task.Run(async () { while (true) { var result await udpServer.ReceiveAsync(); string msg Encoding.UTF8.GetString(result.Buffer); Invoke(new Action(() { richTextBox1.AppendText(msg \r\n); })); } }); } // 发送 private void btnSend_Click(object sender, EventArgs e) { byte[] data Encoding.UTF8.GetBytes(123); udpServer.Send(data, data.Length, 192.168.1.100, 10000); }3. TCP 通信有连接稳定必须先连接再收发不会丢包TCP 客户端TcpClient client new TcpClient(); client.Connect(192.168.1.100, 8888); // 发送 byte[] data Encoding.UTF8.GetBytes(Hello TCP); client.GetStream().Write(data, 0, data.Length);TCP 服务器TcpListener server new TcpListener(IPAddress.Any, 8888); server.Start(); // 等待客户端连接 Task.Run(async () { while (true) { TcpClient c await server.AcceptTcpClientAsync(); } });4. Socket 通信TCP/UDP 底层Socket 网络通信的插座TCP 示例Socket socket new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(192.168.1.100, 8888); // 发送 byte[] data Encoding.UTF8.GetBytes(Socket msg); socket.Send(data);5. Modbus 通信工业设备专用读写传感器、PLC、仪表RTU 串口示例// 发送 Modbus 03 指令 byte[] cmd new byte[] { 1, 03, 00, 0x22, 00, 01, CRC... }; serialPort.Write(cmd, 0, cmd.Length); // 接收解析 byte[] buffer new byte[8]; serialPort.Read(buffer, 0, 8); int value buffer[3] * 256 buffer[4]; double temp value / 100.0;四、总结1. 串口配置 COM、波特率打开串口发送指令接收解析显示数据2. UDP创建端口后台接收发送数据显示3. TCP服务端监听客户端连接收发数据关闭4. Socket创建 Socket连接 / 绑定收发5. Modbus发指令收回复解析数据显示
WinForm 通信 5 大核心 串口 / UDP / TCP / Socket / Modbus
发布时间:2026/5/28 22:52:30
通信 两个 / 多个设备之间按照约定规则互相传递数据、交换信息。生活类比 两个人说话、打电话、发微信就是人际通信 电脑和单片机、电脑和另一台电脑、电脑和 PLC 传数据就是设备通信。核心就三件事有发送方把数据发出去有接收方把数据收下来遵守统一规则格式、速率、编码、指令必须一致否则 “听不懂”一、一句话记住 5 种通信通信名称一句话理解用途串口通信电脑 ↔ 硬件传感器、PLC、单片机有线工业设备、五插针、单片机UDP 通信局域网发消息不连接直接发快、广播、数据透传TCP 通信先连接再收发稳定不丢包聊天、文件、远程控制Socket 通信TCP/UDP 的底层统称所有网络通信的基础Modbus 通信工业设备标准协议PLC、传感器、仪表读写二、最核心区别串口有线、点对点UDP无连接、不可靠、快TCP有连接、可靠、慢一点Socket网络通信的接口Modbus工业设备对话规则三、5 种通信完整 WinForm 代码示例1. 串口通信SerialPort最常用电脑 ↔ 五插针 / 传感器 / PLC// 打开串口 SerialPort sp new SerialPort(); sp.PortName COM7; sp.BaudRate 9600; sp.Open(); // 发送数据 private void btnSend_Click(object sender, EventArgs e) { sp.Write(Hello); } // 接收数据 private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) { string str sp.ReadExisting(); Invoke(new Action(() { richTextBox1.AppendText(str \r\n); })); }2. UDP 通信无连接直接发不需要连接谁都能收速度最快UdpClient udpServer new UdpClient(10000); // 接收 private void ReceiveUDP() { Task.Run(async () { while (true) { var result await udpServer.ReceiveAsync(); string msg Encoding.UTF8.GetString(result.Buffer); Invoke(new Action(() { richTextBox1.AppendText(msg \r\n); })); } }); } // 发送 private void btnSend_Click(object sender, EventArgs e) { byte[] data Encoding.UTF8.GetBytes(123); udpServer.Send(data, data.Length, 192.168.1.100, 10000); }3. TCP 通信有连接稳定必须先连接再收发不会丢包TCP 客户端TcpClient client new TcpClient(); client.Connect(192.168.1.100, 8888); // 发送 byte[] data Encoding.UTF8.GetBytes(Hello TCP); client.GetStream().Write(data, 0, data.Length);TCP 服务器TcpListener server new TcpListener(IPAddress.Any, 8888); server.Start(); // 等待客户端连接 Task.Run(async () { while (true) { TcpClient c await server.AcceptTcpClientAsync(); } });4. Socket 通信TCP/UDP 底层Socket 网络通信的插座TCP 示例Socket socket new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(192.168.1.100, 8888); // 发送 byte[] data Encoding.UTF8.GetBytes(Socket msg); socket.Send(data);5. Modbus 通信工业设备专用读写传感器、PLC、仪表RTU 串口示例// 发送 Modbus 03 指令 byte[] cmd new byte[] { 1, 03, 00, 0x22, 00, 01, CRC... }; serialPort.Write(cmd, 0, cmd.Length); // 接收解析 byte[] buffer new byte[8]; serialPort.Read(buffer, 0, 8); int value buffer[3] * 256 buffer[4]; double temp value / 100.0;四、总结1. 串口配置 COM、波特率打开串口发送指令接收解析显示数据2. UDP创建端口后台接收发送数据显示3. TCP服务端监听客户端连接收发数据关闭4. Socket创建 Socket连接 / 绑定收发5. Modbus发指令收回复解析数据显示