解决方案 »

  1.   

    即使你有2K数据,发送也是分块进行的,RS232的底层发送缓冲没有这么大,但接收缓冲区可以设的大一些。程序中检查接收的数据长度,收到的长度与缓冲区数据量相同时说明接收完成,此时可全部读入。例:// 接收数据
    void CCommThread::ReceiveData(void)
    {
    byte myByte[1024];
    DWORD dwErrors; // 错误信息
    COMSTAT Rcs; // COMSTAT结构通信设备的当前信息
    int Len=0;
    LOOP:
    ClearCommError(hCom,
    &dwErrors,
    &Rcs); // 获取读缓冲区数据长度
    if(Len!=Rcs.cbInQue) // 数据未收完
    {
    Len=Rcs.cbInQue;
    Sleep(3);
    goto LOOP; // 再接收
    } if(Len<1) // 无数据
    return; // 读缓冲区并处理收到的数据
    if(ReadFile(hCom,
    &myByte,
    Len,
    NULL,
    &Rol))
    {
    //****************************
    // PopToUdp(myByte,Len,true);
    //****************************
    // 报告数据
    byte* p=new byte[Len];
    memcpy(p,myByte,Len);
    ReportUp(RS_RECEIVE,p,Len);
    }
    // Sleep(10); // 此处无,将使下一次读不稳定,可能读不到结果
    fStopMsg=false; // 允许事件函数发送消息
    }