做过Modem、串口通讯的进来,一定要高手哦

gpmn 2001-07-25 10:27:00
我做的软件现在可以直接通过串口接受任何收到的数据,
但是,和Modem连接情况是,开头的connect xxxx,busy,no caarier....一类的Modem发过来的字符可以收到,但是随后的数据都收不到,根本就没有送到我的缓冲区,
ComStat.cbInQue==0!!!!!怎么回事,各位不妨直言,说不定可以旁敲侧击;
另外,超级终端可以完全正确的显示;
我的其他部分和VC自带的例子SERIAL一样;

DWORD PASCAL ReadCommBlock()//读数据的函数;
{
BOOL fReadStat ;
COMSTAT ComStat ;
DWORD dwErrorFlags;
DWORD dwLength=0;
DWORD dwError;
OVERLAPPED os ;

memset(InBuf,0,500);
if(!goon)return 0;//try to make sure that hComm is valide;

ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;
if(ComStat.cbInQue<=0)return 0;

memset( &os, 0, sizeof( OVERLAPPED ) ) ;
os.hEvent=CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event reset
NULL ) ; // no name
if (os.hEvent == NULL)
return 0;


fReadStat = ReadFile(hComm ,InBuf,ComStat.cbInQue, &dwLength,&os);

if (!fReadStat)
{
if (GetLastError() == ERROR_IO_PENDING)
{
while(!GetOverlappedResult(hComm,&os, &dwLength, TRUE ))
{
dwError = GetLastError();
if(dwError == ERROR_IO_INCOMPLETE)
// normal result if not finished
continue;
else
{
// an error occurred, try to recover
ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;
break;
}
}
}
else
{
// some other error occurred
dwLength = -1 ;
ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;
}
}
CloseHandle(os.hEvent);
return dwLength;
}

UINT CommWatchProc(LPVOID pParam)//监视com事件的线程;
{
DWORD dwEvtMask ;
HWND hWnd=(HWND)pParam;
COMSTAT ComStat ;
DWORD dwErrorFlags;

while(goon)
{
ClearCommError(hComm, &dwErrorFlags, &ComStat ) ;//1
CString ss;//2
ss.Format("%d",dwErrorFlags);//3
if(dwErrorFlags!=0)AfxMessageBox(ss);//4加了这句话后可以收到Modem发过来的Connect xxx等字符;

dwEvtMask = 0 ;
SetCommMask(hComm, EV_RXCHAR );//本来是用EV_RXFLAG接受的,现在就是用EV_RXCHAR也什么都收不到
WaitCommEvent( hComm, &dwEvtMask, NULL );//停在这里;

// if((dwEvtMask & EV_RXFLAG)!=EV_RXFLAG)
// continue;

if(ReadCommBlock()>=0)//对方发送数据后,这里什么也读不到;
::SendMessage(hWnd,WM_HANDLEBUFFER,0,0);
else
::SendMessage(hWnd,WM_WATCHPROCERROR,0,0);
}
return true;
}
...全文
149 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gpmn 2001-07-25
To Un1:
我在初始化串口的时候加了这个函数,没问题吧?
谢谢各位捧场!
回复
Un1 2001-07-25
EscapeCommFunction m_commid, SETDTR
回复
gpmn 2001-07-25
关键是怎么和Modem通讯,奇怪的是为什么和串口好好的,怎么和Modem不来电?Modem通讯还有什么和普通串口通讯不一样的地方吗??
gpmn@sohu.com,谢谢;
回复
zb_china 2001-07-25
我有旧程序,API写的,很简单,要得话发mail来。

zb_china@sina.com
回复
gpmn 2001-07-25
各位:
找到原因了:除了res=EscapeCommFunction(hComm, SETDTR ) ;
以外,还要加res=EscapeCommFunction(hComm, SETRTS ) ;
但是很奇怪,示例程序Serial只用了前一个,而且可以正确的从modem接收数据;我和它一样写却不行,为什么?
谁能解答这个问题,我用最卑鄙的手法给他200分;
我只能给50分,但是我可以问n个问题,heihei
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-07-25 10:27
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……