次の方法で共有


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

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

  • OnReceive: Receive を呼び出して取得するデータがバッファー内にあることをこのソケットに通知 します

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

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

  • OnConnect: 接続試行が完了したことをこの接続ソケットに通知します。おそらく正常に、またはエラーが発生している可能性があります。

  • OnClose: 接続されているソケットが閉じられたことをこのソケットに通知します。

    追加の通知関数は OnOutOfBandData です。 この通知は、送信側ソケットに送信する "帯域外" データがあることを受信ソケットに通知します。 帯域外データは、接続されているストリーム ソケットの各ペアに関連付けられている論理的に独立したチャネルです。 帯域外チャネルは、通常、"緊急" データを送信するために使用されます。 MFC では、帯域外データがサポートされます。 クラス CAsyncSocket を使用する上級ユーザーは帯域外チャネルを使用する必要がある場合がありますが、 クラス CSocket のユーザーは使用しないことをお勧めします。 そのようなデータを渡すためには 2 番目のソケットを作成する方が簡単です。 帯域外データの詳細については、Windows SDK で入手できる Windows ソケットの仕様を参照してください。

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

これらの関数は、オーバーライド可能なコールバック関数です。 CAsyncSocket メッセージ CSocket 通知に変換しますが、使用する場合は通知関数の応答方法を実装する必要があります。 通知関数は、読み取るデータの存在など、関心のあるイベントがソケットに通知されるときに呼び出されます。

MFC は通知関数を呼び出して、通知時にソケットの動作をカスタマイズできるようにします。 たとえば、OnReceive通知関数からReceiveを呼び出します。つまり、読み取るデータがあることを通知されたら、Receiveを呼び出して読み取ります。 この方法は必要ありませんが、有効なシナリオです。 別の方法として、通知機能を使用して進行状況の追跡、 TRACE メッセージの出力などを行うことができます。

これらの通知を利用するには、派生ソケット クラスで通知関数をオーバーライドし、実装を提供します。

データの受信や送信などの操作中に、 CSocket オブジェクトが同期になります。 同期状態では、現在のソケットが必要な通知を待機している間、他のソケット用の通知はすべてキューに入れられます。 (たとえば、 Receive 呼び出し中に、ソケットは通知を読み取る必要があります)。ソケットが同期操作を完了し、もう一度非同期になると、他のソケットがキューに登録された通知の受信を開始できます。

CSocket では、OnConnect 通知関数は呼び出されません。 接続の場合は、 Connectを呼び出します。この呼び出しは、接続が完了したときに返されます (正常またはエラー)。 接続通知の処理方法は、MFC 実装の詳細情報です。

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

詳細については、以下を参照してください。

こちらも参照ください

MFC の Windows ソケット