c++ - 使用 CreateFile 打开套接字

标签 c++ winapi sockets serial-port createfile

我们有一些旧的串行代码,可以通过打开然后关闭串行端口来检查串行端口是否可用。现在我们正在向应用程序添加网络支持,我想通过以字符串形式提供 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;
    }

我知道我可以先连接再关闭,但我想以最少的更改重用该功能。如果我能重用这个功能就更好了。如果不是,那么我将不得不编写代码来确定它是否是套接字。

我想知道通过 CreateFile 打开套接字的正确方法是什么?

最佳答案

您不能通过 CreateFile 创建套接字。您应该使用 Windows socket API以此目的。要创建 SOCKET 句柄,请使用 WSASocket .请注意,此函数返回的 SOCKET 可用作带有某些 Windows functions, such as ReadFile and WriteFile 的 Windows 句柄。 .

关于c++ - 使用 CreateFile 打开套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/516763/

相关文章:

c++ - STA(单线程单元)COM 对象 - 生成工作线程?

c++ - WIndow 10 中的类型转换问题(WinAPI 中的 DWORD 和 ULONG_PTR)

c++ - 预处理器忽略

node.js - 如何在测试过程中手动触发net.socket错误事件

c - 用C语言创建一个TCP套接字

php - 处理具有前导长度值的套接字数据

c++ - 将 Void 作为指针传递给类,然后执行其内容

c++ - 为什么我不能用谓词的实例化构造 std::set,但我可以分配以这种方式构造的 std::set?

c++ - MinGW-w64 编译因 nullptr_t 而失败

C++ win32 以固定的时间步长打印到控制台