C#通过串口服务器另一台计算机发送数据,本机接收数据,为什么偶尔的时候发送18个字节,int bytesRead = serialPort.BytesToRead;只读到17个字节,why?求解C#监听串口串口服务器

解决方案 »

  1.   

    用串口监控工具监控下串口数据。再有,我觉得你接收用的函数BytesToRead改成ReadLine或者ReadExisting试试。这两个函数用法有点讲究,接收串口数据包括换行用ReadLine,反之用ReadExisting。
      

  2.   

    your package lost when sending 
      

  3.   

       我也是刚学的,串口读上来的每次都不一样多就自己写了一个类,然后对包长度,然后再读我自己的包。    
            const int BUFSIZE = 256;
            byte[] bt = new byte[BUFSIZE];
    private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)//接收数据事件
            {
     int toRead = SerialPort1.BytesToRead > BUFSIZE ? BUFSIZE : SerialPort1.BytesToRead;
    SerialPort1.Read(bt, 0, SerialPort1.BytesToRead);
     LinShiJieShou.Fuzhi(bt, toRead);
    } private static ArrayList number = new ArrayList();        public static void Fuzhi(byte[] Data, int toRerad)
            {
                for (int i = 0; i < toRerad; i++)
                {
                    number.Add(Data[i]);
                }
            }
      

  4.   

    我的做法是接收数据事件触发后先暂停一下(thread.sleep(50)),然后再读取数据。
      

  5.   

    只读到17个字节?你是用什么方法读取的?查询方式还是用事件触发?
    用DataReceived事件接收的话,第一次没有全部读取,剩下的字节会再次触发该事件的。
    定义一个字段来存储读取到的数据,每次在DataReceived事件里将串口的数据放到这个字段里。
      

  6.   


    ReadLine()超时,说明你接收的串口数据里没有换行符号,你可以用ReadExisting接收
      

  7.   

    你sleep一下,或者按协议组帧传输,然后接受到的数据插入队列中,分析队列够一帧了就解析出来。
      

  8.   

    一般sleep是不能彻底解决你的问题的
    串口延时只是说等待数据到达
    真正的使用中需要有串口数据协议
    根据协议解析接收到的数据
    这就是一般说的缓存数据,然后分析