Windows 使用FD_设置并选择串行端口
我不熟悉串行端口编程和套接字,所以请温柔:) 我正在Windows7上使用VisualStudio2010。我正在尝试从串行端口接收数据包(插入了一个USB Digi XStick,用于连接远程设备)。我首先使用WriteFile发送初始数据包,该操作成功完成。当我调用select时,我得到错误10038“试图对非套接字的对象执行操作” 以下是相关代码:Windows 使用FD_设置并选择串行端口,windows,sockets,serial-port,Windows,Sockets,Serial Port,我不熟悉串行端口编程和套接字,所以请温柔:) 我正在Windows7上使用VisualStudio2010。我正在尝试从串行端口接收数据包(插入了一个USB Digi XStick,用于连接远程设备)。我首先使用WriteFile发送初始数据包,该操作成功完成。当我调用select时,我得到错误10038“试图对非套接字的对象执行操作” 以下是相关代码: char szCodedPort[20]; sprintf(szCodedPort, "\\\\.\\COM%d",3); //manuall
char szCodedPort[20];
sprintf(szCodedPort, "\\\\.\\COM%d",3); //manually set for testing purposes
HANDLE fileHandle = CreateFileA(szCodedPort,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
fd_set readfds;
int fd;
fd = _open_osfhandle((long)fileHandle, O_RDONLY);
FD_ZERO(&readfds);
FD_SET(fd, &readfds);
WSAData WSA_Data;
WSAStartup(MAKEWORD(2,2),&WSA_Data);
res = select(fd,&readfds,NULL,NULL, &waitlen);
WSACleanup();
我想我的问题是fd,但我不知道如何解决它。我可以使用什么来传递到表示串行端口的FD_集合,以便select在使用readfds时停止生成错误消息?或者我的邮政编码不正确吗?我认为Windows不支持对通用文件描述符(即:非套接字文件描述符)执行
select()
ing操作。您可能必须WaitForSingleObject()
或WaitForMultipleObjects()
或其他方法……这是一种方法。以重叠模式打开串行端口,然后使用重叠I/O、I/O完成端口或WaitCommEvent()
在串行端口有可用数据时接收通知。否则,您必须使用GetCommMask()
或ClearCommError()
手动轮询端口状态。我认为Windows不支持对通用文件描述符(即:非套接字文件描述符)执行select()
ing操作。您可能必须WaitForSingleObject()
或WaitForMultipleObjects()
或其他方法……这是一种方法。以重叠模式打开串行端口,然后使用重叠I/O、I/O完成端口或WaitCommEvent()
在串行端口有可用数据时接收通知。否则,您必须使用GetCommMask()
或ClearCommError()
手动轮询端口状态。