初期化処理の後、SOCKETオブジェクトは実体化する必要があります。
ソケットを作成します
- getaddrinfo関数の呼出部分は、コマンドラインよりサーバ名用のIPアドレスを必要とします。
そのアプリケーションについて、そのインターネットファミリィについては、IPv6またはIPv4のどちらのアドレスも使用可能です。そのアプリケーションは、ソケットタイプとしてTCPプロトコル用のストリームソケットを必要とします。
#define DEFAULT_PORT "27015"
struct addrinfo *result = NULL,
*ptr = NULL,
hints;
int iResult;
ZeroMemory( &hints, sizeof(hints) );
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
iResult = getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result);
if ( iResult != 0 )
{
printf("getaddrinfo failed: %d\n", iResult);
WSACleanup();
return 1;
}
- ConnectSocketと言う名前にてSOCKETオブジェクトを作成します。
SOCKET ConnectSocket = INVALID_SOCKET;
- そのsocket関数呼出し、そして、そのConnectSocket変数へ値を戻す。
このアプリケーションのために、そのgetaddrinfo呼出しによって戻される、そのインターネットアドレスファミリィ、ストリーミングソケッツ、そして、そのTCP/IPプロトコル、を使ってください。
ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
ptr->ai_protocol);
- エラーチェックはそのソケットが妥当である処を確実とします。
if (ConnectSocket == INVALID_SOCKET)
{
printf("Error at socket(): %ld\n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
return;
}
socket関数に渡されるパラメータは、実装の違いについて変更する事が出来ます。
エラー特定はネットワーキングコードの成功の重要な鍵です.
もしそのsocket呼出が失敗したならば、INVALID_SOCKETを戻します。
前のコードのifステートメントは、ソケット作成時にエラーが発生した場合にエラーをキャッチします。
WSAGetLastErrorは、最後に発生したエラー番号を戻します。
ノート アプリケーションによっては、より広範囲なエラーチェックが必要です。
WSACleanupはWS2_32 DLLの使用終了に使われます。
サーバ次のステップ: ソケットをバインディング
クライアント次のステップ: ソケットへの接続
|