接收数据的代码是这样的: DWORD dwLength = 0;
if(ReadFile(m_hComm,pRXData,nRXLength,&dwLength,NULL)==FALSE)
{
DWORD dwErrorNo = GetLastError();
if(dwErrorNo)
{
CString strComError;
strComError.Format("数据接收时错误,错误码:%lu",dwErrorNo);
SetComError(strComError);
}
else m_strComError.Empty();
}
else m_strComError.Empty();接收端等待拨号,并且周期性的运行这几句话,发现每次刚拨通的时候会收到一大堆的0x91 0x11,后面除了收到正常数据外,还间插着一些乱七八糟的数据;后来我让发送端不再发送数据,只是拨通,但接收端仍然在刚拨通的时候收到一堆0x91 0x11,后面还不断收到乱七八糟的数据(当然也没有正常数据,因为发送端没有发送)。这是怎么回事呢?大侠救命啊!!!!

解决方案 »

  1.   

    先使用下面的语句清除缓冲区,再接收,同时要注意发送端也要清除:
    ClearCommError(hComm,&dwError,&comStat);
    ReadFile(hComm,DB->m_szTemp,comStat.cbInQue,&dwSize,0); //清除接收缓冲区
      

  2.   

    已经改成这样了,好像多余数据少了些,可是还是有啊,每次都有7、8个字节 //别人说要先清空缓冲区
    DWORD dwError;
    COMSTAT comStat;
    ClearCommError(m_hComm,&dwError,&comStat); BYTE* byTemp = new BYTE[1024];
    int nLen;
    DWORD dwSize;
    if(comStat.cbInQue>1024) nLen = 1024;
    else nLen = comStat.cbInQue;
    ReadFile(m_hComm,byTemp,nLen,&dwSize,0); //清除接收缓冲区
    delete[] byTemp; /////////////////////
    if(ReadFile(m_hComm,pRXData,nRXLength,&dwLength,NULL)==FALSE)
    {
    DWORD dwErrorNo = GetLastError();
    if(dwErrorNo)
    {
    CString strComError;
    strComError.Format("数据接收时错误,错误码:%lu",dwErrorNo);
    SetComError(strComError);
    }
    else m_strComError.Empty();
    }我感觉这样清空不对呀
      

  3.   

    modem型号不一样的话有可能不行
    曾经试过一个内置猫和一个外置猫,就是这种情况
    换成型号一样的就好了。