Socket.ReceiveMessageFromAsync(SocketAsyncEventArgs) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定した SocketFlagsを使用して、指定したデータのバイト数をデータ バッファー内の指定した場所に非同期的に受信し、エンドポイントとパケット情報を格納します。
public:
bool ReceiveMessageFromAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool ReceiveMessageFromAsync(System.Net.Sockets.SocketAsyncEventArgs e);
member this.ReceiveMessageFromAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function ReceiveMessageFromAsync (e As SocketAsyncEventArgs) As Boolean
パラメーター
この非同期ソケット操作に使用する SocketAsyncEventArgs オブジェクト。
返品
true I/O 操作が保留中の場合は 。
Completed パラメーターのe イベントは、操作の完了時に発生します。
false I/O 操作が同期的に完了した場合は > この場合、Completed パラメーターの e イベントは発生せず、メソッド呼び出しが戻った直後にパラメーターとして渡されたe オブジェクトを調べて、操作の結果を取得できます。
例外
RemoteEndPointを null にすることはできません。
Socketが閉じられました。
ソケットにアクセスしようとしたときにエラーが発生しました。
注釈
ReceiveMessageFromAsync メソッドは、主にコネクションレス ソケットでメッセージ データを受信するために使用されます。 ソケットのローカル アドレスは既知である必要があります。 このメソッドは、データグラムと生のソケットでのみ使用できます。 このメソッドを呼び出す前に、ソケットの種類を Dgram または Raw に設定してソケットを初期化する必要があります。 これは、ソケットが Socketを使用して構築されるときに行うことができます。
呼び出し元は、 SocketAsyncEventArgs.RemoteEndPoint プロパティをリモート ホストのエンドポイントと同じ種類の EndPoint に設定する必要があります。 プロパティは、実際のリモート エンドポイントへの正常な受信時に更新されます。
このメソッドを正常に呼び出すには、 System.Net.Sockets.SocketAsyncEventArgs オブジェクトの次のプロパティとイベントが必要です。
呼び出し元は、コールバック メソッドで情報を取得できるように、SocketAsyncEventArgs.UserToken メソッドを呼び出す前に必要な任意のユーザー状態オブジェクトにReceiveMessageFromAsync プロパティを設定できます。 コールバックに 1 つのオブジェクトよりも多くの情報が必要な場合は、他の必要な状態情報をメンバーとして保持する小さなクラスを作成できます。
メッセージ指向ソケットの場合、受信メッセージはバッファーの合計サイズまでバッファーに配置されます。 SocketAsyncEventArgs.CountプロパティとSocketAsyncEventArgs.Offsetプロパティによって、バッファー内のデータの配置場所とデータ量が決まります。
ReceiveMessageFromAsync メソッドは、特定のPacketInformationに対して初めて呼び出されるときにtrueするSocket ソケット オプションを自動的に設定します。 ただし、 IPPacketInformation オブジェクトは、ソケット オプションが設定された後にローカル コンピューターに到着するパケットに対してのみ有効です。 ソケットがローカル エンドポイントにバインドされている場合 ( Bind メソッドによって明示的に、または Connect、 ConnectAsync、 SendTo、または SendToAsync のいずれかのメソッドによって暗黙的に) と、 ReceiveMessageFromAsync メソッドの最初の呼び出しの間にパケットが送信された場合、 ReceiveMessageFromAsync メソッドの呼び出しは、これらのパケットに対して無効な IPPacketInformation オブジェクトになります。
すべてのIPPacketInformation オブジェクトが有効であることを確認するには、PacketInformation メソッドを使用してローカル エンドポイントにバインドする前にtrueアプリケーションで SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean) ソケット オプションを設定する必要があります。
アプリケーションは、データグラムがユニキャスト、マルチキャスト、またはブロードキャスト アドレスを使用して送信されたかどうかを知る必要がある場合に、結果の IPPacketInformation オブジェクトを調べることができます。