问题如题,那位兄弟遇到过上面的问题啊?我用超级终端在服务器端将该串口打开一下,发现服务器端接受数据又恢复正常了。很急,哪位同僚知道原因啊
解决方案 »
- 一个新手的问题,关于对话框中的updatedata
- 编写的windows下Hello,World为什么不能执行
- 请问如何判断打印机是否准备就绪?就像win2k的那样?
- 急救!!
- 修改IE属性怎样立即见效?
- 什么工具可以查看dll中的输出函数???
- 我想学vxd编程,请推荐几本参考书,和vtools和SOFTICE的最新版本下载网址!
- 关于数据存储(或者说数据结构)...的简单问题,大虾们帮助!!!!!急!!!!!!!!!!
- CSocket有Bug!!!!!!!!!!!!!
- 关于NT/2000用户、ADSI得源码例子哪里有?
- 谢谢各位原来的帮助,现在又有一个新问题,求教!!小妹急盼!!
- 派生类构造函数自动调用基类的构造函数,这个程序的结果不对,不只为何?
CString strPortName;
strPortName.Format("\\\\.\\COM%d",pComPortPara->Port);
//打开串口
HANDLE hComPort = CreateFile(strPortName,
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attrs
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED , // overlapped I/O
NULL );
//打开失败
if (hComPort == INVALID_HANDLE_VALUE)
{
sprintf(logText,"创建串口出错,出错原因:%s",ErrorCode2Text(GetLastError()));
pLogClass->Write(logText,LOG_LEVEL_HIGH);
return NULL;
}
int g = GetLastError(); //通讯缓冲区大小设置???
SetupComm(hComPort, 1024,1024); ////读取操作超时设置
//COMMTIMEOUTS CommTimeOuts;
//CommTimeOuts.ReadIntervalTimeout = MAXDWORD;
//CommTimeOuts.ReadTotalTimeoutMultiplier = 0 ;
//CommTimeOuts.ReadTotalTimeoutConstant = 0 ;
//CommTimeOuts.WriteTotalTimeoutMultiplier = 16 ;
//CommTimeOuts.WriteTotalTimeoutConstant = 3000 ;
//SetCommTimeouts(hComPort, &CommTimeOuts) ; //串口参数设置
DCB dcb ;
dcb.DCBlength = sizeof( DCB ) ;
GetCommState(hComPort,&dcb ) ;
dcb.BaudRate = pComPortPara->BaudRate;
dcb.ByteSize = pComPortPara->ByteSize;
dcb.Parity = pComPortPara->Parity;
dcb.StopBits = pComPortPara->StopBits;
//
//dcb.fBinary=TRUE;
//dcb.fDsrSensitivity=false;
//dcb.fParity=dcb.Parity;
//dcb.fOutX=false;
//dcb.fInX=false;
//dcb.fNull=false;
//dcb.fAbortOnError=TRUE;
//dcb.fOutxCtsFlow=FALSE;
//dcb.fOutxDsrFlow=false;
//dcb.fDtrControl=DTR_CONTROL_DISABLE;
//dcb.fDsrSensitivity=false;
//dcb.fRtsControl=RTS_CONTROL_DISABLE;
//dcb.fOutxCtsFlow=false;
//dcb.fOutxCtsFlow=false;
if (!SetCommState(hComPort,&dcb))
{
sprintf(logText,"创建串口出错,%s.",ErrorCode2Text(GetLastError()));
pLogClass->Write(logText,LOG_LEVEL_HIGH);
//设置错误,退出
CloseHandle(hComPort) ;
return NULL;
}
//创建一个IOLink对象
PIOLink pLink = new IOLink;
pLink->hLink = hComPort;
pLink->pParameter = NULL;
pLink->pObject = pComPortPara->pObject;
//将连接加入链表
AddLink2List(pLink);
//关联到完成端口
if(CreateIoCompletionPort(hComPort,
CompletionPortHandle,
(DWORD)pLink,
0) == NULL)
{
sprintf(logText,"关联到完成端口失败,错误代码:%s",ErrorCode2Text(GetLastError()));
pLogClass->Write(logText,LOG_LEVEL_HIGH);
DeleteLink(pLink);
//shutdown(hSocket,SD_BOTH);
//closesocket(hSocket);
//ReleaseLink(pLink);
//delete pLink;
//pLink = NULL;
return NULL;
}
//写入日志
sprintf(logText,"串口%d被打开,句柄:%d",pComPortPara->Port,hComPort);
pLogClass->Write(logText); //准备接收数据
RecvMsg(pLink);
PURGE_TXABORT Terminates all outstanding overlapped write operations and
returns immediately, even if the write operations have not
been completed.
PURGE_RXABORT Terminates all outstanding overlapped read operations and
returns immediately, even if the read operations have not
been completed.
PURGE_TXCLEAR Clears the output buffer (if the device driver has one).
PURGE_RXCLEAR Clears the input buffer (if the device driver has one).
DWORD dwCreationDisposition, // how to create
OPEN_EXISTING,改成CREATE_NEW,试试