Socket.ReceiveMessageFromAsync(SocketAsyncEventArgs) 方法

定义

首先,使用指定的数据缓冲区,以异步方式将指定的字节数接收到数据缓冲区中的指定 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

参数

e
SocketAsyncEventArgs

SocketAsyncEventArgs要用于此异步套接字作的对象。

返回

如果 I/O作挂起,则为 Completed完成作后,将引发参数上的e事件。

false 如果 I/O作同步完成,则为 。 在这种情况下, Completed 不会引发参数上的 e 事件,在 e 方法调用返回以检索作结果后,可以立即检查作为参数传递的对象。

例外

尝试访问套接字时出错。

注解

该方法 ReceiveMessageFromAsync 主要用于接收无连接套接字上的消息数据。 套接字的本地地址必须已知。 此方法只能用于数据报和原始套接字。 必须使用设置为或调用此方法之前设置 DgramRaw 套接字类型初始化套接字。 使用套接字构造 Socket时,可以执行此操作。

调用方必须将属性SocketAsyncEventArgs.RemoteEndPoint设置为EndPoint与远程主机的终结点相同的类型。 在成功接收到实际远程终结点时,该属性将更新。

若要成功调用此方法,需要对象上的 System.Net.Sockets.SocketAsyncEventArgs 以下属性和事件:

调用方可以在调用SocketAsyncEventArgs.UserToken该方法之前将ReceiveMessageFromAsync属性设置为所需的任何用户状态对象,以便在回调方法中检索信息。 如果回调需要比单个对象更多的信息,则可以创建一个小类来将其他必需的状态信息保存为成员。

对于面向消息的套接字,传入消息将放入缓冲区中,最大大小为缓冲区的总大小。 和SocketAsyncEventArgs.CountSocketAsyncEventArgs.Offset属性确定数据放置在缓冲区中的位置和数据量。

该方法ReceiveMessageFromAsync在首次为给定PacketInformation调用套接字选项时自动设置true该选项Socket。 但是,该 IPPacketInformation 对象仅适用于在设置套接字选项后到达本地计算机的数据包。 如果在套接字绑定到本地终结点(由方法显式或Bind由其中一个、或Connect方法隐式调用)和对该方法的第一ConnectAsyncSendToSendToAsync次调用ReceiveMessageFromAsync之间发送套接字,则调用ReceiveMessageFromAsync方法将导致这些数据包的对象无效。IPPacketInformation

为了确保所有IPPacketInformation对象都有效,应用程序应在使用PacketInformation该方法绑定到本地终结点之前将套接字选项设置为true该选项SetSocketOption(SocketOptionLevel, SocketOptionName, Boolean)

如果应用程序需要使用单播、多播或广播地址发送数据报,则可以检查生成的 IPPacketInformation 对象。

适用于

另请参阅