Socket.ReceiveAsync(SocketAsyncEventArgs) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
接続された Socket オブジェクトからデータを受信する非同期要求を開始します。
public:
bool ReceiveAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool ReceiveAsync(System.Net.Sockets.SocketAsyncEventArgs e);
member this.ReceiveAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function ReceiveAsync (e As SocketAsyncEventArgs) As Boolean
パラメーター
この非同期ソケット操作に使用する SocketAsyncEventArgs オブジェクト。
返品
true I/O 操作が保留中の場合は 。
Completed パラメーターのe イベントは、操作の完了時に発生します。
false I/O 操作が同期的に完了した場合は > この場合、Completed パラメーターの e イベントは発生せず、メソッド呼び出しが戻った直後にパラメーターとして渡されたe オブジェクトを調べて、操作の結果を取得できます。
例外
引数が無効です。
Buffer パラメーターのBufferListまたはeプロパティは、有効なバッファーを参照する必要があります。 これらのプロパティのいずれかまたは他のプロパティを同時に設定できますが、両方を同時に設定することはできません。
SocketAsyncEventArgs パラメーターで指定されたe オブジェクトを使用して、ソケット操作が既に進行中でした。
Socketが閉じられました。
ソケットにアクセスしようとしたときにエラーが発生しました。
注釈
ReceiveAsync メソッドは、接続されているソケットまたはバインドされたコネクションレス ソケットで使用され、受信データの読み取りに使用されます。 ソケットのローカル アドレスは既知である必要があります。
バインドされたコネクションレス ソケットの場合、この関数は、受信したメッセージの受け入れ元のアドレスを制限します。 この関数は、接続で指定されたリモート アドレスからのみメッセージを返します。 他のアドレスからのメッセージは自動的に破棄されます。
SocketAsyncEventArgs.SocketFlags パラメーターの e プロパティは、Window Sockets サービス プロバイダーに読み取り要求に関する追加情報を提供します。 このパラメーターの使用方法の詳細については、 System.Net.Sockets.SocketFlagsを参照してください。
このメソッドを正常に呼び出すには、 System.Net.Sockets.SocketAsyncEventArgs オブジェクトの次のプロパティとイベントが必要です。
SocketAsyncEventArgs.Buffer または SocketAsyncEventArgs.BufferList
SocketAsyncEventArgs.Count SocketAsyncEventArgs.Bufferが設定されている場合
SocketAsyncEventArgs.Offset SocketAsyncEventArgs.Bufferが設定されている場合
呼び出し元は、コールバック メソッドで情報を取得できるように、SocketAsyncEventArgs.UserToken メソッドを呼び出す前に必要な任意のユーザー状態オブジェクトにReceiveAsync プロパティを設定できます。 コールバックに 1 つのオブジェクトよりも多くの情報が必要な場合は、他の必要な状態情報をメンバーとして保持する小さなクラスを作成できます。
バイト ストリーム スタイルのソケットの場合、受信データは、バッファーがいっぱいになるか、接続が閉じられるか、内部でバッファーに格納されたデータが使い果たされるまでバッファーに配置されます。
メッセージ指向ソケットの場合、受信メッセージは、 e パラメーターに関連付けられているバッファーの合計サイズまでバッファーに配置されます。 メッセージがバッファーより大きい場合、バッファーにはメッセージの最初の部分が入力されます。
接続指向ソケットの場合、 ReceiveAsync メソッドは、ソケットがバイト ストリームかメッセージ指向かに依存する 2 つの方法のいずれかで、仮想回線の正常終了を示すことができます。 バイト ストリームの場合、0 バイトが読み取られた場合、グレースフル クロージャが示され、それ以上バイトは読み取られなくなります。 0 バイトメッセージが許容されるメッセージ指向ソケットの場合、SocketExceptionがネイティブ Winsock WSAEDISCON エラー コード (10101) に設定されたSocketAsyncEventArgs.SocketErrorが、グレースフル クロージャを示すために使用されます。 いずれの場合も、SocketExceptionがネイティブ Winsock WSAECONNRESET エラー コード (10054) に設定されたSocketAsyncEventArgs.SocketErrorは、中止終了が発生したことを示します。