为什么捕获串口的数据不全?

zl7910 2004-03-06 05:42:15
我把两台电脑用串口线连起来,一台电脑安装一个串口发送和捕获程序(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;
}
...全文
50 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧