当我尝试连接到我的服务器时,我的客户端在函数WSAStringToAddress期间失败,错误为10022,我认为问题是我尝试从控制台参数获取IPv6地址。对于我的本地主机地址,控制台参数的格式为:: 1。
这是失败的功能:
WSAStringToAddress((LPWSTR)argv[1], AF_INET6, NULL, (SOCKADDR *)&server, &len)
这里是服务器和len变量的代码:
struct sockaddr_in6 server;
int len = sizeof(server);
memset( &server, 0, sizeof (server));
server.sin6_family = AF_INET6;
server.sin6_port = htons(PORT);
是的,我希望有人看到我犯的错误。
答案 0 :(得分:1)
Error 10022为WSAEINVAL
,表示您传递了无效参数。在这种情况下的问题是,在编译Unicode程序时,WSAStringToAddress
采用宽字符串,并且您将一个窄字符串强制转换为宽字符串。在插入演员表之前你得到的编译器错误应该引发了一个红旗。
您有几个选择:
main
函数更改为wmain
,其中包含宽字符参数字符串WSAStringToAddressA
代替WSAStringToAddress
MultiByteToWideChar
在这种特殊情况下,我建议明确使用WSAStringToAddressA
函数,因为使用宽字符版本对此函数没有任何额外的好处。