Ошибка WSAStringToAddress 10022 / чтение IPv6 из аргумента консоли

когда я пытаюсь подключиться к своему серверу, мой клиент выходит из строя во время функции WSAStringToAddress с ошибкой 10022, я думаю, проблема в том, что я пытаюсь получить IPv6-адрес из аргумента консоли. Формат аргумента консоли :: 1 для моего адреса localhost.

Вот функция, которая терпит неудачу:

WSAStringToAddress((LPWSTR)argv[1], AF_INET6, NULL, (SOCKADDR *)&server, &len)

А вот код для переменных server и len:

struct sockaddr_in6 server;
int len = sizeof(server);
memset( &server, 0, sizeof (server));
server.sin6_family = AF_INET6;
server.sin6_port = htons(PORT);

Да, я надеюсь, что кто-нибудь увидит мою ошибку.


person Markus Wilhelm    schedule 16.01.2013    source источник
comment
Может ли случиться, что у вас обычный main(), а не wmain(), и ваш argv[1] char* вместо _5 _ / _ 6_, как в этом вопросе: stackoverflow.com/questions/11694312/wsastringtoaddress-failing?   -  person Anton Kovalenko    schedule 17.01.2013


Ответы (1)


Ошибка 10022: WSAEINVAL, что означает, что вы передали неверный параметр. Проблема в этом случае заключается в том, что при компиляции программы Unicode WSAStringToAddress принимает строку с широкими символами, а вы передаете ей преобразование узкой строки в широкую строку. Ошибка компилятора, которую вы получили до того, как вы вставили приведение, должна была вызвать красный флаг.

У вас есть несколько вариантов:

  • Измените свое приложение, чтобы оно не поддерживало Юникод (не рекомендуется)
  • Измените функцию main на wmain вместо этого, который принимает строки аргументов широких символов
  • Явно используйте узкую (ANSI) версию, вызывая WSAStringToAddressA вместо WSAStringToAddress
  • Преобразуйте строку из узкой в ​​широкую, используя MultiByteToWideChar

В этом конкретном случае я бы рекомендовал явно использовать функцию WSAStringToAddressA, поскольку использование версии с широкими символами не дает никаких дополнительных преимуществ для этой функции.

person Adam Rosenfield    schedule 16.01.2013