7

67从下面的代码中收到错误代码,这意味着ERROR_BAD_NET_NAME.

为什么会这样?我该如何解决?

SOCKADDR address;
strcpy_s(address.sa_data, "8.8.8.8");
address.sa_family = AF_INET;

if (!QOSStartTrackingClient(QoSHandle, &address, 0))
    cout << GetLastError();
4

1 回答 1

0

你初始化SOCKADDR错误:

strcpy_s(address.sa_data, "8.8.8.8");- 这是错误的。

真的SOCKADDR只是占位符

使用 sockaddr 的 Winsock 函数并不严格解释为指向 sockaddr 结构的指针。该结构在不同地址族的上下文中解释不同。唯一的要求是第一个 u_short 是地址族,内存缓冲区的总大小(以字节为单位)是 namelen。

这里开始

要为地址的每个部分实际填写值,您可以使用 专门针对这种地址格式的SOCKADDR_IN数据结构。SOCKADDRSOCKADDR_IN数据结构的大小相同。您只需进行转换即可在两种结构类型之间切换。

在您的情况下,您需要使用SOCKADDR_IN

    SOCKADDR_IN sa = { AF_INET };
    sa.sin_addr.s_addr = inet_addr("8.8.8.8");
    if (!QOSStartTrackingClient(QoSHandle, (SOCKADDR*)&sa, 0))
        cout << GetLastError();
于 2017-05-10T18:07:24.583 回答