Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C WSAstringLoadAddress错误10022/从控制台参数读取IPv6_C_Windows_Sockets_Client Server_Winsock2 - Fatal编程技术网

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

C WSAstringLoadAddress错误10022/从控制台参数读取IPv6,c,windows,sockets,client-server,winsock2,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

当我尝试连接到我的服务器时,我的客户端在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);
是的,我希望有人看到我犯的错误。

WSAEINVAL
,这意味着你传递了一个无效的参数。本例中的问题是,在编译Unicode程序时,
WSAStringToAddress
接受一个宽字符串,并将窄字符串转换为宽字符串。在插入强制转换之前出现的编译器错误应该会引发一个红色标志

您有几个选择:

  • 将应用程序更改为非Unicode(不推荐使用
  • main
    函数改为,它接受宽字符参数字符串
  • 通过调用
    wsastringtoadress a
    而不是
    wsastringtoadress
  • 使用将字符串从窄转换为宽

在这种特殊情况下,我建议显式使用
wsastringtoadressa
函数,因为使用宽字符版本不会为该函数提供任何额外的优势。

是否会出现普通
main()
而不是
wmain()
,以及
argv[1]
char*
而不是
WCHAR*
/
(LPWSTR)
,就像这个问题一样:?