.NET串口通信中将`0X1A`当做EOF处理,.NET接收到EOF会触发一次接收中断,此时事件形参`SerialDataReceivedEventArgs`值为枚举 `Eof`,其他为`Chars`。
参考: stackoverflow 、MSDN
## 测试
.NET编程,中断方式接收,发送一串数据后等待回应,打印进中断次数;另外一端用串口助手来实现。通信用虚拟串口。
[TestClass] public class EofByteSerialTest { private int _count = 0; private byte[] _receivedDataPacket; SerialPort _serialPort = new SerialPort() { PortName = "COM5", BaudRate = 115200, DataBits = 8, StopBits = StopBits.One, Parity = Parity.None }; [TestMethod] public void TestMethod1() { _serialPort.Open(); byte[] sendedData = { 0x01, 0x02, 0x03, 0x1a, 0x2a, 0x1a }; _serialPort.DataReceived += ComReceive; _serialPort.Write(sendedData, 0, sendedData.Length); Thread.Sleep(10000); //foreach (byte b in _receivedDataPacket) //{ // Console.WriteLine(b); //} Console.WriteLine(_count); } private void ComReceive(object sender, SerialDataReceivedEventArgs e) { //if (e.EventType == SerialData.Eof) //{ // //特殊处理 //} _count++; _receivedDataPacket = new byte[_serialPort.BytesToRead]; _serialPort.Read(_receivedDataPacket, 0, _receivedDataPacket.Length); // 协议解析... } }
串口助手数据:
测试结果: