次の方法で共有


Windows ソケット : ソケット通知

更新 : 2007 年 11 月

ここでは、ソケット クラスの通知関数について説明します。これらのメンバ関数はコールバック関数です。重要なイベントが発生すると、フレームワークはこれらの関数を呼び出して、ソケット オブジェクトに通知します。通知関数は、次のとおりです。

  • OnReceive: バッファにデータがあるので Receive を呼び出して取り出すよう、このソケットに通知します。

  • OnSend: Send を呼び出して、データを送信できるようになったことをこのソケットに通知します。

  • OnAccept: Accept を呼び出して、保留中の接続要求を受け入れることができることをこの待機ソケットに通知します。

  • OnConnect: 接続動作が完了したことをこの接続側ソケットに通知します (正常完了またはエラー)。

  • OnClose: 接続先のソケットが閉じたことをこのソケットに通知します。

    dt12dhfd.alert_note(ja-jp,VS.90).gifメモ :

    OnOutOfBandData という通知関数もあります。この通知関数は、送信側ソケットが "帯域外" データを送ろうとしていることを受信側ソケットに知らせます。帯域外データとは、接続されているストリーム ソケットの各ペアに対応付けられている論理的に独立したチャネルです。帯域外チャネルは、通常 "緊急" データの送信に使います。MFC は帯域外データをサポートしています。CAsyncSocket クラスを操作する上級プログラマは、帯域外チャネルを使用できますが、CSocket クラスのユーザーは使用しないでください。この種のデータを渡すための別のソケットを作成する方がより簡単です。帯域外データの詳細については、Windows SDK で Windows ソケットの仕様を参照してください。

CAsyncSocket クラスから派生する場合は、アプリケーションに関係のあるネットワーク イベントの通知関数をオーバーライドする必要があります。CSocket クラスからクラスを派生する場合は、関係する通知関数をオーバーライドするかどうかを選択できます。また、CSocket 自体を使うこともできます。その場合、通知関数は既定のままです。

これらの関数は、オーバーライド可能なコールバック関数です。CAsyncSocketCSocket はメッセージを通知に変換しますが、それを使用する通知関数の応答動作は自分で実装する必要があります。通知関数は、読み出しデータがある場合など、関係のあるイベントをソケットが受け取ったときに呼び出されます。

MFC が通知関数を呼び出すため、通知を受けたときのソケットの動作をカスタマイズできます。たとえば、通知関数 OnReceive から Receive を呼び出すことができます。つまり、読み取るデータがあるという通知を受けたときに、Receive を呼び出してそのデータを読み取ることができます。これ以外の方法も考えられますが、これは有効な手段の 1 つです。ほかの利用方法としては、進行状況の追跡や TRACE メッセージの出力などがあります。

これらの通知機能を利用するには、派生させたソケット クラスで通知関数をオーバーライドします。

データの送受信中に CSocket オブジェクトは同期状態になります。同期状態では、現在のソケットが目的の通知を待機している間、ほかのソケットに宛てられた通知はキューに置かれます。たとえば、Receive を呼び出している間、ソケットは読み込みの通知を待っています。ソケットが同期動作を完了して非同期状態に戻ると、ほかのソケットがキューの通知を受信できるようになります。

dt12dhfd.alert_note(ja-jp,VS.90).gifメモ :

CSocket では、通知関数 OnConnect が呼び出されることはありません。接続時は、Connect を呼び出すだけです。接続が正常終了またはエラー終了すると、この関数が戻ります。接続通知の処理方法は、MFC の実装の細部に関係します。

各通知関数の詳細については、『MFCリファレンス』で CAsyncSocket クラスの関数を参照してください。ソース コードと MFC サンプルの詳細については、「MFC サンプル」を参照してください。

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

参照

概念

MFC における Windows ソケット