当我尝试连接到我的服务器时,我的客户机在函数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);是啊,我希望有人能看到我犯的错误。
发布于 2013-01-17 07:33:49
Error 10022为WSAEINVAL,这意味着您传递的参数无效。这种情况下的问题是,在编译Unicode程序时,WSAStringToAddress接受一个宽字符字符串,而您向它传递的是一个转换为宽字符串的窄字符串。在插入类型转换之前,您收到的编译器错误应该已经发出了一个红色信号。
您有几个选项:
将您的应用程序更改为非Unicode(而不是将您的main函数改为wmain,该函数采用宽字符参数,并通过调用WSAStringToAddressA而不是使用MultiByteToWideChar将字符串从窄到宽来使用窄(ANSI)版本
在这种特殊情况下,我建议显式使用WSAStringToAddressA函数,因为使用宽字符版本不会为该函数提供任何额外的好处。
https://stackoverflow.com/questions/14369658
复制相似问题