次の方法で共有


Windows ソケット : アーカイブ付きソケットの使用

この技術情報では CSocket のプログラミング モデルについて説明します。CAsyncSocketを分類すると、クラス CSocket は親抽象化のレベルでソケット サポートされています。CSocket は、 MFC の CArchive のオブジェクトを通じてソケット オブジェクトとの間でデータを渡すために MFC のシリアル化のプロトコルのバージョンを使用します。CSocket は、自身を生の API を使用して、または CAsyncSocketを分類する必要があること (Windows メッセージのバックグラウンド処理を管理している間ブロック)を提供し、通信の多くの辺を管理する CArchiveへのアクセスを提供します。

ヒントヒント

CAsyncSocketのより便利なバージョンとしてクラス CSocket を、単独で使用できますが、最も単純なプログラミング モデルは CArchive のオブジェクトで CSocket を使用することです。

詳細については、アーカイブを持つソケットの実装がどのようについては、 Windows ソケット : アーカイブ付きソケットの動作を参照してください。たとえば Windows ソケット : 動作シーケンスWindows ソケット : アーカイブを使用するソケットの例を参照してください、 " " を参照してください。クラスを独自に、ソケット クラスから派生して取得できる機能の一部については、 Windows ソケット : ソケット クラスからの派生を参照してください。

[!メモ]

確立された (非 MFC)サーバーと通信する MFC のクライアント プログラムを作成する場合は、アーカイブを通じて C++ オブジェクトを渡さないにします。サーバーがオブジェクト型を理解する MFC アプリケーション送信するとき、であるオブジェクトを受け取り、非シリアル化できません。非 MFC アプリケーションとの通信に関する関連のマテリアルでは、技術情報 Windows ソケット : バイトの順序付けを参照してください。

CSocket のプログラミング モデル

CSocket を使用してオブジェクトは、 MFC のクラス オブジェクトを一緒に作成し、関連付ける必要があります。次の一般的な手順では、各ステップでは、ソケットの種類が異なるアクションを必要とする手順 3 を除くソケット サーバーとクライアントのソケットの両方で、実行されます。

ヒントヒント

実行時に、サーバー アプリケーションでは、通常、クライアント アプリケーションが接続を検索するときに最初に起動し準備と 「から」です。クライアントが接続しようとしたときにサーバーの準備ができていない場合、通常はユーザー アプリケーションが後で再接続できるように、要求します。

ソケット サーバーとクライアントのソケット間の通信を設定するには

  1. CSocket オブジェクトを構築します。

  2. 基になるソケット ハンドルを作成するには、オブジェクトを使用します。

    CSocket のクライアント オブジェクトに対して、データグラム ソケットを必要とする 生成(&&C),create,作成,生成には、既定のパラメーターを使用する必要があります。CSocket のサーバー オブジェクトの場合、 生成(&&C),create,作成,生成 の呼び出しでポートを指定します。

    [!メモ]

    CArchive は、データグラム ソケットを使用しません。データグラム ソケットに CSocket を使用する場合は、アーカイブなしで CAsyncSocketを、つまり、を使用するため、クラスを使用します。データグラムが信頼できない (到着することが保証されている)または順序で logger に返され、)ため、アーカイブを使用してシリアル化と互換性がありません。確実に、順番に完了すると、シリアル化操作が要求されます。データグラムに CArchive のオブジェクトで CSocket を使用すると、 MFC アサーションは失敗します。

  3. ソケットでクライアント、サーバー ソケットへのソケット オブジェクトを接続するに CAsyncSocket::Connect をダイヤルします。

    または

    ソケットでサーバーの場合、待機し始める呼び出し CAsyncSocket::Listen は、クライアントからの接続を試行します。接続要求を受け取ると、 CAsyncSocket::Acceptを呼び出すことによってこれを受け入れます。

    [!メモ]

    承諾 のメンバー関数では、パラメーターとして CSocket 新しい空のオブジェクトへの参照を受け取ります。承諾をダイヤルする前にこのオブジェクトを構築します。このソケット オブジェクトがスコープの出かければ、接続が閉じます。この新しいソケット オブジェクトの 生成(&&C),create,作成,生成 をダイヤルしないでください。

  4. CSocket のオブジェクトを関連付ける CSocketFile のオブジェクトを作成します。

  5. 読み込み、 ()または ()送信するための CArchive のオブジェクトを格納するデータを作成します。アーカイブは CSocketFile オブジェクトに関連付けられます。

    CArchive がデータグラム ソケットを使用しないことに注意してください。

  6. クライアントとサーバーの間のソケット パスのデータへの CArchive のオブジェクトを使用します。

    CArchive の特定のオブジェクトが 1 台の方向のデータだけを移動することに注意してください: 受信読み込み ()または ()送信用に保存します。場合によっては、 CArchive の 2 種類のオブジェクトを使用しています: データを送信する場合は 1、受信を受け取るためです。

    接続を受け入れ、アーカイブを設定した後、できます。パスワードを検証するなどのタスクを実行できます。

  7. アーカイブ、ソケット ファイルおよびソケット オブジェクトを破棄します。

    [!メモ]

    クラス CSocketを持つ CArchive の提供を使用するための IsBufferEmpty のメンバー関数分類します。バッファーは複数のデータのメッセージを含めている場合、すべてが読み取られ、バッファーが解除されるまでループする必要があります。は受信するデータがあること、以下の通知は無期限に遅らせることがあります。すべてのデータを取得するようにするに IsBufferEmpty を使用します。

技術情報 Windows ソケット : 動作シーケンス はコード例のこのプロセスの両側について説明します。

詳細については、次のトピックを参照してください。

参照

関連項目

CSocket::Create

概念

MFC における Windows ソケット