我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();
我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();
你初始化SOCKADDR
错误:
strcpy_s(address.sa_data, "8.8.8.8");
- 这是错误的。
真的SOCKADDR
只是占位符
使用 sockaddr 的 Winsock 函数并不严格解释为指向 sockaddr 结构的指针。该结构在不同地址族的上下文中解释不同。唯一的要求是第一个 u_short 是地址族,内存缓冲区的总大小(以字节为单位)是 namelen。
从这里开始
要为地址的每个部分实际填写值,您可以使用 专门针对这种地址格式的SOCKADDR_IN数据结构。SOCKADDR和SOCKADDR_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();