打开使用的CreateFile插座
-
21-08-2019 - |
题
我们已经有了哪些检查串行端口是否可以通过简单地打开它,然后将其关闭一些旧的串行代码。现在,我们正在增加网络支持的应用程序,我想作为一个字符串提供的IP地址重复使用的功能。
/**
* So far I have tried:
* A passed in portPath normally looks like:
\\?\acpi#pnp0501#1#1#{GUID}
10.2.0.155:2001
//10.2.0.155:2001/
\\.\10.2.0.155:2001\
\\?\10.2.0.155:2001\
* all without success.
*/
bool PortIsAvailable( const CString& portPath )
{
HANDLE hCom = ::CreateFile( portPath,
GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
FILE_FLAG_OVERLAPPED, // not overlapped I/O
NULL ); // hTemplate must be NULL for comm devices
if (INVALID_HANDLE_VALUE != hCom )
{
::CloseHandle( hCom );
return true;
}
return false;
}
我知道我可以使用,随后CONNECT BY关机,但我想重用以最小的功能改变。如果我可以重复使用的功能就更好了。如果没有,那么我会编写的代码,确定它是否是一个插座或没有。
我想知道通过的CreateFile打开插座的正确方法是什么?
解决方案
您不能创建通过的CreateFile的插座。您应该使用Windows 套接字API 此目的。为了创建套接字句柄,您可以使用 WSASocket 。请注意,这个函数返回的SOCKET可以作为一个Windows的一些的窗函数,如ReadFile和WriteFile的。
其他提示
我不相信你可以操纵插座与CreateFile()
。套接字是从BSD(IIRC)的进口,并在名称兼容的方式实施的提取(通过winsock.h
原来,目前winsock2.h
)。我不认为微软以往任何时候都增加了对套接字CreateFile()
支持。
更多的理由:大多数(?一切)CreateFile()
操纵返回本地Windows句柄。因为套接字是一个非母语的抽象,他们没有在操作系统原生手柄,所以它是没有意义的CreateFile()
来处理它们。
不隶属于 StackOverflow