我有 2 个 GUI 应用程序,一个在 C++ 中,一个在 C# 中。
应用程序相同,并且有一个从 COM 端口写入和读取的功能。
当我运行我的 C++ 应用程序时,我从 Serial.Read 收到正确的结果,这是一个 24 字节的缓冲区。
但是当我运行我的 C# 应用程序时,我收到了不均匀的结果:
* 如果我不在写入和读取之间设置 sleep ,则只有 1 个字节的缓冲区。
* 如果我在写入和读取之间设置 sleep (10-22 字节之间),则大小不同。
这可能是什么原因?
我的 C++ 代码:
serial.write(&c, 1, &written);
serial.read(read_buf, read_len, &received); // received = 24
我的 C# 代码:
serial.Write(temp_char, 0, 1);
received = serial.Read(read_buff, 0,read_len); // received = 1
带 sleep 的 C#:
serial.Write(temp_char, 0, 1);
Thread.Sleep(100);
received = serial.Read(read_buff, 0,read_len); // received = (10~22)
最佳答案
串行端口只提供字节流,它们不知道您如何将数据 block 写入它们。当您调用 read 时,将返回已收到的字节,如果这不是完整的消息,您需要重复调用 read 直到获得整个消息。
您需要定义一个协议(protocol)来指示消息边界,这可以是一个特殊字符(例如基于文本的协议(protocol)中的新行),或者您可以在消息前加上一个长度。
关于c# - 从 C# 中的串行端口接收不均匀的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60089614/