Socket.BeginReceiveFrom メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定したネットワーク デバイスから、データの非同期の受信を開始します。
public:
IAsyncResult ^ BeginReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult
パラメーター
- offset
- Int32
データを格納する、buffer
パラメーター内の、インデックス番号が 0 から始まる位置。
- size
- Int32
受信するバイト数。
- socketFlags
- SocketFlags
SocketFlags 値のビットごとの組み合わせ。
- callback
- AsyncCallback
AsyncCallback デリゲート。
- state
- Object
この要求の状態情報を格納するオブジェクト。
戻り値
非同期の読み取りを参照する IAsyncResult。
例外
.NET Framework および .NET 5 以前のみ: ソケットにアクセスしようとしたときにエラーが発生しました。
offset
が 0 未満です。
または
offset
が buffer
の長さを超えています。
または
size
が 0 未満です。
- または -
size
が、 buffer
の長さから offset
パラメーターの値を引いた値を超えています。
Socket が閉じられました。
呼び出し履歴の上位にある呼び出し元には、要求された操作に対するアクセス許可がありません。
注釈
重要
これは互換性 API です。 新しい開発に APM (Begin*
および End*
) メソッドを使用することはお勧めしません。 代わりに、 ベースの Task
同等のものを使用します。
を実装AsyncCallbackBeginReceiveFromするコールバックを渡して、操作の完了に関する通知を受け取ることができます。 基になるネットワーク スタックが同期的に操作を完了すると、 への呼び出し BeginReceiveFrom中にコールバックがインラインで実行されることに注意してください。 この場合、 CompletedSynchronously 返される IAsyncResult の プロパティは に true
設定され、メソッドが同期的に完了したことを示します。 メソッドに AsyncState 渡される状態オブジェクトを取得するには、 の プロパティ IAsyncResult を BeginReceiveFrom 使用します。
非同期 BeginReceiveFrom 操作は、 メソッドを呼び出して完了する EndReceiveFrom 必要があります。 通常、 メソッドはデリゲートによって AsyncCallback 呼び出されます。 EndReceiveFrom は、操作が完了するまで呼び出し元のスレッドをブロックします。
このメソッドは、 パラメーターにデータを buffer
読み取り、データの送信元となるリモート ホスト エンドポイントをキャプチャします。 このエンドポイントを取得する方法については、 を EndReceiveFrom参照してください。 この方法は、不明なホストまたは複数のホストからコネクションレス データグラムを非同期的に受信する場合に最も便利です。 このような場合、 は、 BeginReceiveFrom 受信した最初のエンキューされたデータグラムをローカル ネットワーク バッファーに読み取ります。 受信したデータグラムが のbuffer
BeginReceiveFromサイズより大きい場合、メソッドは可能な限り多くのメッセージを入力buffer
し、 をSocketExceptionスローします。 信頼性の低いプロトコルを使用している場合、余分なデータは失われます。 信頼できるプロトコルを使用している場合、余分なデータはサービス プロバイダーによって保持され、十分な大きさのバッファーで メソッドを BeginReceiveFrom 呼び出すことで取得できます。
リモート ホスト エンドポイントが常に返されるようにするには、 メソッドを使用して Bind をローカル エンドポイントに明示的にバインドSocketし、 パラメーターを に設定するか、必要IPv6に応じて パラメーターを にPacketInformation設定して メソッドoptionLevel
をIP呼び出しoptionValue
、optionName
メソッドを呼び出す前にこのオプションを有効にするパラメーターを呼びSetSocketOption出すBeginReceiveFrom必要があります。 それ以外の場合、受信側が メソッドを呼び出 BeginReceiveFrom す前に送信側が多数のデータグラムを送信したときに、リモート ホスト エンドポイントが返されない可能性があります。
BeginReceiveFromはコネクションレス プロトコルを対象としていますが、接続指向プロトコルも使用できます。 これを行う場合は、まず、 メソッドを呼び出してリモート ホスト接続を確立するか、 メソッドまたは BeginAccept メソッドをBeginConnect / Connect呼び出して受信接続要求をAccept受け入れる必要があります。 接続を BeginReceiveFrom 確立または受け入れる前に メソッドを呼び出すと、 が表示 SocketExceptionされます。 また、 メソッドを呼び出す前に、コネクションレス プロトコルの既定のリモート ホストを BeginReceiveFrom 確立することもできます。
remoteEp
パラメーター
接続指向のソケットでは、 BeginReceiveFrom は、 パラメーターで size
指定されたバイト数まで使用可能なデータを読み取ります。
保留中 BeginReceiveFromの を取り消すには、 メソッドを Close 呼び出します。
注意
を受け取った場合は SocketException、 プロパティを SocketException.ErrorCode 使用して特定のエラー コードを取得します。
Note
このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。 詳細については、「.NET Frameworkのネットワーク トレース」を参照してください。
注意
実行コンテキスト (セキュリティ コンテキスト、偽装されたユーザー、および呼び出し元のコンテキスト) は、非同期 Socket メソッド用にキャッシュされます。 特定のコンテキスト (特定の非同期 Socket メソッド、特定 Socket のインスタンス、および特定のコールバック) を最初に使用した後、そのコンテキストを後続で使用すると、パフォーマンスが向上します。
適用対象
こちらもご覧ください
.NET