次の方法で共有


Socket.BeginReceiveFrom メソッド

定義

指定したネットワーク デバイスから、データの非同期の受信を開始します。

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

パラメーター

buffer
Byte[]

受信したデータの保存場所となる Byte 型の配列。

offset
Int32

データを格納する、bufferパラメーター内の、インデックス番号が 0 から始まる位置。

size
Int32

受信するバイト数。

socketFlags
SocketFlags

SocketFlags 値のビットごとの組み合わせ。

remoteEP
EndPoint

同期受信時に EndPoint 更新されるリモート ホストのエンドポイントと同じ型の への参照。

callback
AsyncCallback

AsyncCallback デリゲート。

state
Object

この要求の状態情報を格納するオブジェクト。

戻り値

非同期の読み取りを参照する IAsyncResult

例外

buffernull です。

または

remoteEPnull です。

.NET Framework および .NET 5 以前のみ: ソケットにアクセスしようとしたときにエラーが発生しました。

offset が 0 未満です。

または

offsetbuffer の長さを超えています。

または

size が 0 未満です。

- または -

size が、 buffer の長さから offset パラメーターの値を引いた値を超えています。

Socket が閉じられました。

呼び出し履歴の上位にある呼び出し元には、要求された操作に対するアクセス許可がありません。

注釈

重要

これは互換性 API です。 新しい開発に APM (Begin* および End*) メソッドを使用することはお勧めしません。 代わりに、 ベースの Task同等のものを使用します。

を実装AsyncCallbackBeginReceiveFromするコールバックを渡して、操作の完了に関する通知を受け取ることができます。 基になるネットワーク スタックが同期的に操作を完了すると、 への呼び出し BeginReceiveFrom中にコールバックがインラインで実行されることに注意してください。 この場合、 CompletedSynchronously 返される IAsyncResult の プロパティは に true 設定され、メソッドが同期的に完了したことを示します。 メソッドに AsyncState 渡される状態オブジェクトを取得するには、 の プロパティ IAsyncResultBeginReceiveFrom 使用します。

非同期 BeginReceiveFrom 操作は、 メソッドを呼び出して完了する EndReceiveFrom 必要があります。 通常、 メソッドはデリゲートによって AsyncCallback 呼び出されます。 EndReceiveFrom は、操作が完了するまで呼び出し元のスレッドをブロックします。

このメソッドは、 パラメーターにデータを buffer 読み取り、データの送信元となるリモート ホスト エンドポイントをキャプチャします。 このエンドポイントを取得する方法については、 を EndReceiveFrom参照してください。 この方法は、不明なホストまたは複数のホストからコネクションレス データグラムを非同期的に受信する場合に最も便利です。 このような場合、 は、 BeginReceiveFrom 受信した最初のエンキューされたデータグラムをローカル ネットワーク バッファーに読み取ります。 受信したデータグラムが のbufferBeginReceiveFromサイズより大きい場合、メソッドは可能な限り多くのメッセージを入力bufferし、 をSocketExceptionスローします。 信頼性の低いプロトコルを使用している場合、余分なデータは失われます。 信頼できるプロトコルを使用している場合、余分なデータはサービス プロバイダーによって保持され、十分な大きさのバッファーで メソッドを BeginReceiveFrom 呼び出すことで取得できます。

リモート ホスト エンドポイントが常に返されるようにするには、 メソッドを使用して Bind をローカル エンドポイントに明示的にバインドSocketし、 パラメーターを に設定するか、必要IPv6に応じて パラメーターを にPacketInformation設定して メソッドoptionLevelIP呼び出しoptionValueoptionNameメソッドを呼び出す前にこのオプションを有効にするパラメーターを呼び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 のインスタンス、および特定のコールバック) を最初に使用した後、そのコンテキストを後続で使用すると、パフォーマンスが向上します。

適用対象

こちらもご覧ください