C WSAstringLoadAddress错误10022/从控制台参数读取IPv6
当我尝试连接到我的服务器时,我的客户端在WSAStringToAddress函数期间失败,错误为10022,我认为问题在于我试图从控制台参数获取IPv6地址。控制台参数的格式是::1,表示我的本地主机地址 以下是失败的函数: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((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)
,就像这个问题一样:?