Windows ソケット : CAsyncSocket クラスの使い方
ここでは、CAsyncSocket クラスの使い方について説明します。 このクラスは、Windows ソケット API を非常に低いレベルでカプセル化します。 CAsyncSocket は、ネットワーク通信に関する知識が深いプログラマ向けであり、ネットワーク イベントの通知用にコールバックを使う場合に使います。 このようなプログラマを対象としているので、ここでは基本的な内容を説明します。 CAsyncSocket を使うと、柔軟性を損なわずに、Windows ソケットによって MFC アプリケーションにおける複数のネットワーク プロトコルの操作を簡略化できます。 通信処理を直接プログラミングした方が、CSocket クラスの汎用的な代替モデルを使うより、効率的な場合もあります。
CAsyncSocket については、『MFC リファレンス』で説明されています。 また、Visual C++ では、Windows SDK に Windows ソケットの仕様に関するトピックも用意されています。 Visual C++ には、CAsyncSocket のサンプル アプリケーションは用意されていません。
ネットワーク通信についてあまり知識がなく、簡単な方法が好ましい場合は、CArchive オブジェクトと共に CSocket クラスを使ってください。 参照してくださいWindows ソケット:アーカイブとソケットを使用しての詳細。
ここでは、以下の内容について説明します。
CAsyncSocket オブジェクトの作成と使用
CAsyncSocket 使用時の操作
CAsyncSocket オブジェクトの作成と使用
CAsyncSocket を使うには
CAsyncSocket オブジェクトを生成し、このオブジェクトを使って基になる SOCKET ハンドルを作成します。
ソケットは、MFC の 2 段階の生成手順で作成します。
次に例を示します
CAsyncSocket sock; sock.Create( ); // Use the default parameters
または
CAsyncSocket* pSocket = new CAsyncSocket; int nPort = 27; pSocket->Create( nPort, SOCK_DGRAM );
最初のコンストラクターは、CAsyncSocket オブジェクトをスタック上に作成します。 2 番目のコンストラクターは、CAsyncSocket オブジェクトをヒープ上に作成します。 Create の最初の呼び出しでは、既定のパラメーターを使ってストリーム ソケットを作成します。 2 番目の Create 呼び出しでは、ポートとアドレスを指定してデータグラム ソケットを作成します。 Create のバージョンと生成方式の組み合わせは任意です。
Create は以下のパラメーターを使用します。
「ポート」:短整数。
サーバー ソケットの場合は、ポートを必ず指定します。 クライアント ソケットの場合は、通常このパラメーターの既定値を使い、Windows ソケットにポートを選択させます。
ソケットの種類:SOCK_STREAM (既定値) または SOCK_DGRAM。
ソケット "アドレス" ("ftp.microsoft.com"、"128.56.22.8" など)
ネットワーク上の自分のインターネット プロトコル (IP) アドレスを指定します。 通常は、このパラメーターの既定値を使います。
用語のポートと「ソケット アドレス」で説明していますWindows ソケット:ポートとソケット アドレス。
クライアント ソケットの場合は、CAsyncSocket::Connect を使って、ソケット オブジェクトをサーバー ソケットに接続します。
または
サーバー ソケットの場合は、CAsyncSocket::Listen を使って、クライアントからの接続要求を待機します。 接続要求を受信したときは、CAsyncSocket::Accept で受け入れます。
接続を受け入れると、パスワードの正当性チェックなどのタスクを実施できます。
注意
Accept メンバー関数には、新しい空の CSocket オブジェクトへの参照をパラメーターとして渡します。 Accept を呼び出す前に、このオブジェクトを構築します。 このソケット オブジェクトがスコープ外に出ると、接続は解除されます。 このソケット オブジェクトを新規作成するときに、Create を呼び出さないでください。 例についてを参照してください「Windows ソケット:シーケンス操作の。
Windows ソケットの API 関数をカプセル化している CAsyncSocket オブジェクトのメンバー関数を呼び出し、ほかのソケットとの通信を実施します。
Windows ソケットの仕様および『MFCリファレンス』の CAsyncSocket クラスを参照してください。
CAsyncSocket オブジェクトを破棄します。
ソケット オブジェクトをスタック上に作成した場合は、含まれる関数がスコープを出ると、デストラクターが呼び出されます。 ソケット オブジェクトを new 演算子でヒープ上に作成した場合は、delete 演算子を使ってオブジェクトを破棄します。
デストラクターは、オブジェクトのメンバー関数 Close を呼び出してから、オブジェクトを破棄します。
このコード シーケンスの例 (実際には、CSocketオブジェクト) を参照してくださいWindows ソケット:シーケンス操作の。
CAsyncSocket 使用時の操作
CAsyncSocket クラスのオブジェクトを作成すると、オブジェクトに Windows の SOCKET ハンドルがカプセル化されて、このハンドルに対する操作が提供されます。 CAsyncSocket を使うときは、API を直接使うときに発生する問題をすべて自分で処理する必要があります。 次に例を示します
"ブロッキング"
送信コンピューターと受信コンピューターでのバイト順序の違い
Unicode とマルチバイト文字セット (MBCS) 間の文字列の変換
これらの条項および追加情報の定義についてを参照してくださいWindows ソケット:ブロック、 Windows ソケット:バイトの順序付け、 Windows ソケット:文字列の変換。
CAsycnSocket クラスを使うと、アプリケーションを柔軟に制御できます。 一方、アプリケーションで柔軟な制御を行う必要がない場合は、CSocket クラスを使用します。 CSocketあなたからの詳細の多くを非表示します。Windows メッセージ ポンプがブロッキング呼び出しとあなたへのアクセスを与えるCArchive、バイト順の違いと文字列の変換を管理します。
詳細については、次のトピックを参照してください。