c# - 从 C# 中的串行端口接收不均匀的结果

标签 c# c++ serial-port

我有 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/

相关文章:

c# - flowlayout 控件不断在 winforms 中以错误的方向添加控件

c# - 如何传递附加参数进行分页

c# - 预加载和显式加载之间的区别

c++ - 在 C++ 中,是否允许将函数指针转换为一个函数指针,该函数指针作为参数获取一个指向基类或派生类的指针?

c# - 从 char[] 缓冲区在 C# 中创建位图

c - 串口,WriteFile影响ReadFile

c#单例代码重用

c++ - 多个 CRT 出现段错误

python - python 中的 usb 自动检测 for linux env

c# - 如何在 Visual C# 中打开连接之前检查 COM 端口是否存在