gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:36:28 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com