Windows ソケット : CAsyncSocket クラスの使い方
この技術情報では、クラス CAsyncSocketを使用する方法について説明します。このクラスは、低レベルで Windows ソケット API をカプセル化することに注意してください。CAsyncSocket は、ネットワーク通信を詳しく知るが、ネットワーク イベント通知のコールバックの利便性が必要になるプログラミングによって使用されます。この想定に基づいて、この技術情報では、基本的な手順のみです。Windows ソケットの MFC アプリケーションで複数のネットワーク プロトコルを処理する容易さが生成 CAsyncSocket を使用することを検討する必要がある場合は、いるが、柔軟性を犠牲にしません。また、完了、自分と通信を直接プログラミングすることにより、より効率を取得できると考えられる場合があります CSocketクラスの詳細に一般的な代替モデルを使用します。
CAsyncSocket は、 " MFC リファレンス" で説明しています。Visual C++ は、 Windows SDKにある Windows ソケットの設計を指定します。詳細は、に委ねられています。Visual C++ は CAsyncSocketのサンプル アプリケーションは用意されていません。
ネットワーク通信にはきわめて知識がないため、最も簡単な解決方法を使用しない場合は、 CArchive のオブジェクトとともに使用するクラス CSocket 。詳細については Windows ソケット: アーカイブを持つソケットを使用する を参照してください。
この技術情報で説明しています:
CAsyncSocket のオブジェクトを作成して使用します。
CAsyncSocket の役割。
CAsyncSocket のオブジェクトを作成して使用します。
CAsyncSocket を使用するには
CAsyncSocket オブジェクトを構築し、 SOCKET の基になるハンドルを作成するには、オブジェクトを使用します。
ソケットの作成はと、ビルドの MFC パターンに従います。
次に例を示します。
CAsyncSocket sock; sock.Create( ); // Use the default parameters
または
CAsyncSocket* pSocket = new CAsyncSocket; int nPort = 27; pSocket->Create( nPort, SOCK_DGRAM );
上の一つ目のコンストラクターは、スタックの CAsyncSocket のオブジェクトを作成します。2 つ目のコンストラクターは、ヒープ CAsyncSocket を作成します。上記の 生成(&&C),create,作成,生成 の最初の呼び出しでは、ストリーム ソケットを作成するために既定のパラメーターを使用します。生成(&&C),create,作成,生成 の 2 番目の呼び出しでは、指定されたアドレスとポートとデータグラム ソケットを作成します。(またはのメソッドの 生成(&&C),create,作成,生成 どちらのバージョンも使用できます)。
生成(&&C),create,作成,生成 へのパラメーターは次のとおりです:
「ポート」: 短整数。
サーバー ソケットに、ポートを指定します。クライアントのソケットに、通常は、 Windows ソケットでポートを選択できるようにするこのパラメーターの既定値を受け入れます。
ソケット型: SOCK_STREAM (既定値)または SOCK_DGRAM。
「ftp.microsoft.com」または 「128.56.22.8」のようなソケット 「」、アドレス。
これは、ネットワークのインターネット プロトコルの (IP) アドレスです。このパラメーターの既定値に、常に依存します。
ポート用語 「」および 「」 Windows ソケット: ポートおよびソケット アドレスソケット アドレスはで説明します。
ソケットで、クライアント CAsyncSocket::Connectを使用してサーバー ソケットへのソケット オブジェクトを接続します。
または
ソケットでサーバー、開始するようにソケット ( CAsyncSocket::Listenと)にリッスン接続するクライアントからはを設定します。接続要求を受け取ると、 CAsyncSocket::Acceptとともに使用します。
接続を受け入れると、場合は、パスワードを検証するなどのタスクを実行できます。
[!メモ]
承諾 のメンバー関数では、パラメーターとして CSocket 新しい空のオブジェクトへの参照を受け取ります。承諾をダイヤルする前にこのオブジェクトを構築します。このソケット オブジェクトがスコープの出かければ、接続が閉じます。この新しいソケット オブジェクトの 生成(&&C),create,作成,生成 をダイヤルしないでください。例については、技術情報 Windows ソケット: 処理の流れを参照してください。
Windows ソケット API 関数をカプセル化する CAsyncSocket のオブジェクトのメンバー関数を呼び出して、ほかのソケットを使用して通信を実行します。
Windows ソケット仕様と MFC の参照のクラス CAsyncSocket を参照してください。
CAsyncSocket のオブジェクトを破棄します。
スタックのソケット オブジェクトを作成する場合は、デストラクターを含む関数がスコープ外になるときに呼び出されます。new 、演算子を使用して作成した場合は、ヒープのソケット オブジェクトをオブジェクトを破棄するときに 削除(&&D),削除,DELETE,Delete 演算子の使用を管理します。
デストラクターはオブジェクトを破棄する前にオブジェクト 閉じる(&&C),閉じる,終了しますか のメンバー関数をダイヤルします。
コードでこのシーケンスの例のように (実際に CSocket のオブジェクトの場合)、 Windows ソケット: 処理の流れを参照してください。
CAsyncSocket の役割
クラス CAsyncSocketのオブジェクトを作成する場合、オブジェクトは Windows ソケット ハンドルをカプセル化し、そのハンドルの操作を提供します。CAsyncSocketを使用する場合、発生する可能性のあるすべての問題に対処する API を直接使用する場合は。次に例を示します。
シナリオを 「ブロック」。
送信と受信のコンピューター間でバイト順の違い。
Unicode とマルチバイト文字セット (MBCS)の文字列間の変換。
これらの用語と追加情報の定義については、 Windows ソケット: ブロック、 Windows ソケット: 処理命令、 Windows ソケット: 文字列の変換を参照してください。
これらの問題にかかわらず、アプリケーションがすべての柔軟性を、の右の選択内容のを必要とする可能性があり、取得できます CAsycnSocket クラスは制御します。そうでない場合、クラス CSocket を代わりに使用することを検討する必要があります。CSocket は、から多くの詳細を非表示にします: これはブロッキング呼び出し時にウィンドウのメッセージ ポンプを組み込み、のバイト順の違いと文字列変換を管理する CArchiveへのアクセスを提供します。
詳細については、次のトピックを参照してください。