请问:1.ReadFile函数接收一个来自串口的字节流数据,放入一个做足够大的缓冲区,这个接收字节流数据可不可能分两次或者几次才能接受完整的数据呢?(对方发送一次,但接收多次触发才接受到完整数据,有没有这种可能?)
      2.菜鸟问题,为什么有很多人要把字节流数据转换成字符串数据发送到串口上,为什么不直接用字节流发送呢?

解决方案 »

  1.   

                    byte[] BufBytes;
                    byte[] OutBytes;
                    BufBytes = new byte[1024];
                    if (hComm != INVALID_HANDLE_VALUE)
                    {
                        OVERLAPPED ovlCommPort = new OVERLAPPED();
                        int BytesRead = 0;
                        ReadFile(hComm, BufBytes, 1024, ref BytesRead, ref ovlCommPort);
                        OutBytes = new byte[BytesRead];
                        Array.Copy(BufBytes, OutBytes, BytesRead);
                        UnHandleData.AddRange(OutBytes);
                        HandleReceiveData(ref UnHandleData);
                    }还有些不太明白,假如对方通过串口一次发送一个100字节的字节流,我通过ReadFile这个函数读取,ReadFile是一直读取到100个字节才返回,还是可能读取100字节的一部分就返回 剩下的通过再次调用ReadFile才能读取到么?ReadFile到底通过字节流的什么判断什么时候返回啊?还有一点不明白的是SerialPort类的DataReceived事件触发默认是有一个字节就触发一次么?多谢了 多谢
      

  2.   

    对了 那个ReadFile的重叠操作我没用 打开串口是用阻塞方式打开的  多谢 这几天有个串口通信的项目 很紧急 麻烦各位啊 刚注册没分
      

  3.   

    ReadFile()可以从当前流的某个位置开始读吗?
    可以的话,楼主可以设置分开数据流读取。
    帮楼主顶了。
      

  4.   

    OVERLAPPED ,不是已经就是异步了吗?一般通过 SetCommMask,WaitCommEvent 来进行处理。C#不太懂。