0

サーバーに接続しようとすると、WSAStringToAddress 関数の実行中にクライアントがエラー 10022 で失敗します。問題は、コンソール引数から IPv6 アドレスを取得しようとしたことだと思います。コンソール引数の形式は、localhost アドレスの ::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);

ええ、誰かが私が犯した間違いを見てくれることを願っています。

4

1 に答える 1

1

エラー 10022WSAEINVAL、無効なパラメーターが渡されたことを意味します。この場合の問題は、Unicode プログラムをコンパイルするときにがワイド文字 stringWSAStringToAddressを受け取り、ワイド文字列にキャストされたナロー文字列を渡していることです。キャストを挿入する前に発生していたコンパイラ エラーは、赤いフラグを立てているはずです。

いくつかのオプションがあります:

  • アプリケーションを非 Unicode に変更します (非推奨)
  • main関数をwmain代わりに、ワイド文字の引数文字列を取るように変更します
  • WSAStringToAddressAの代わりに呼び出して、ナロー (ANSI) バージョンを明示的に使用します。WSAStringToAddress
  • を使用して、文字列を狭いものから広いものに変換しますMultiByteToWideChar

この特定のケースでは、WSAStringToAddressA関数を明示的に使用することをお勧めします。ワイド文字バージョンを使用しても、この関数に特別な利点がないからです。

于 2013-01-16T23:33:48.770 に答える