问题描述
- 控制器给C#上位机窗口程序发送数据的字节接收问题
-
现在的问题是:设置断点后,发现接收的字节长度不稳定,最少是4个,最多会达到上千个。
代码原先是这么写的:
int lenth = serialPort1.BytesToRead;
if (lenth != 0)
{
Byte[] receiveByte = new Byte[length];
serialPort1.Read(receiveByte, 0, length)
………………………………………………………
…………接收的字节转换流程………………
………………………………………………………
}
我想问一下:如果要是固定的每次接收5个字节(包括了报头),是不是需要把receiveByte的字节长度和串口控件的Read方法的第三个参数改成5就行了?现在控制器被人借走暂时无法尝试,如果有其他方法欢迎推荐
解决方案
我记得,serialPort接收到的数据本来就是长度不固定的,有时是N,有时是M,本来就是这样的,和TCP接收数据段是一样的呀,你得自己收集到足够的长度后再解析的
解决方案二:
- 你的说法是对的,如果只要5个字节,就把长度设置成5,那么它会至多只给你5个字节,
- 但是你的想法是不对的。你每次要5个字节的话。我以为是你觉得5个字节正好是你的一个数据块,可以分析出一点东西来。
- 但是万一通讯过程中掉了1个字节数据,你的数据就永远偏了一个字节。所以永远也不会有正确数据了,除非重启通讯。
- 比较好的做法是设定一个协议,在看到协议开始标识前的所有字符都丢弃。(那可能是前一个包的丢了部分数据的剩余部分)
时间: 2024-09-14 03:24:42