Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用FD_设置并选择串行端口_Windows_Sockets_Serial Port - Fatal编程技术网

Windows 使用FD_设置并选择串行端口

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

我不熟悉串行端口编程和套接字,所以请温柔:)

我正在Windows7上使用VisualStudio2010。我正在尝试从串行端口接收数据包(插入了一个USB Digi XStick,用于连接远程设备)。我首先使用WriteFile发送初始数据包,该操作成功完成。当我调用select时,我得到错误10038“试图对非套接字的对象执行操作”

以下是相关代码:

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()
手动轮询端口状态。