为什么捕获串口的数据不全?
我把两台电脑用串口线连起来,一台电脑安装一个串口发送和捕获程序(AccessPort),一台装我编的程序,此程序会把收到的数据原样发送回去
但现在的情况是如果发送小的文件1K字节类,不丢数据,如果发送大点的文件
如10K,只能返回1K的数据,而且我发现收到的数据都是文件的最后部分,为什么?
缓存区和波特率设置成其他数据也不行
源代码如下:
UINT CommWatchProc(LPVOID pParam)
{
DCB dcb;
hComDev=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hComDev==INVALID_HANDLE_VALUE)
{
//假如打开串口失败,返回FALSE
return 0;
}
//设置超时
COMMTIMEOUTS lpCommTimeouts;
if(SetCommTimeouts(hComDev,&lpCommTimeouts)==0)
{return 0;}
//设置接收和发送缓存区
if(SetupComm(hComDev,1024,1024)==0)
{return 0;}
//设置串口参数
if(GetCommState(hComDev,&dcb)==0)
{return 0;}
dcb.BaudRate=CBR_9600; //波特率为9600
dcb.Parity=NOPARITY; //没有效验位
dcb.StopBits=ONESTOPBIT; //一个停止位
dcb.ByteSize=8; //8位数据长度
if(SetCommState(hComDev,&dcb)==0)
{return 0;}
//设置串口的响应事件
if(SetCommMask(hComDev,EV_ERR|EV_RXCHAR)==0)
{return 0;}
LPDWORD lpEventMask;
DWORD dErrors;
COMSTAT stat;
char cBuffer[1030];
DWORD dRealLength;
while(bOpen)
{
WaitCommEvent(hComDev,lpEventMask,NULL);
if((*lpEventMask&EV_RXCHAR)==EV_RXCHAR)
{
ClearCommError(hComDev,&dErrors,&stat);
ReadFilehComDev,cBuffer,stat.cbInQue,&dRealLength,NULL);
}
else
{
if((*lpEventMask&EV_RXCHAR)==EV_ERR)
{
AfxMessageBox("发生线路状态错误!");
}
}
WriteFile(hComDev,cBuffer,stat.cbInQue,&dRealLength,NULL);
}
return 1;
}