WSAStringToAddress错误10022 /从控制台参数读取IPv6

时间:2013-01-16 23:18:00

标签: c windows sockets client-server winsock2

当我尝试连接到我的服务器时,我的客户端在函数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);

是的,我希望有人看到我犯的错误。

1 个答案:

答案 0 :(得分:1)

Error 10022WSAEINVAL,表示您传递了无效参数。在这种情况下的问题是,在编译Unicode程序时,WSAStringToAddress采用宽字符串,并且您将一个窄字符串强制转换为宽字符串。在插入演员表之前你得到的编译器错误应该引发了一个红旗。

您有几个选择:

  • 将您的应用程序更改为非Unicode(不推荐
  • 改为将main函数更改为wmain,其中包含宽字符参数字符串
  • 通过调用WSAStringToAddressA代替WSAStringToAddress
  • 明确使用窄版(ANSI)
  • 使用MultiByteToWideChar
  • 将字符串从narrow转换为wide

在这种特殊情况下,我建议明确使用WSAStringToAddressA函数,因为使用宽字符版本对此函数没有任何额外的好处。