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要用于此异步套接字作的对象。
返回
e事件。
false 如果 I/O作同步完成,则为 。 在这种情况下, Completed 不会引发参数上的 e 事件,在 e 方法调用返回以检索作结果后,可以立即检查作为参数传递的对象。
例外
参数无效。 参数Buffer上的BufferList或e属性必须引用有效的缓冲区。 可以设置其中一个或另一个属性,但不能同时设置这两个属性。
套接字操作已在使用 SocketAsyncEventArgs 参数中指定的 e 对象进行中。
尝试访问套接字时出错。
注解
该方法 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属性设置为所需的任何用户状态对象,以便在回调方法中检索信息。 如果回调需要比单个对象更多的信息,则可以创建一个小类来将其他必需的状态信息保存为成员。
对于字节流式套接字,传入数据将放入缓冲区,直到填充缓冲区、关闭连接或内部缓冲的数据耗尽。
对于面向消息的套接字,传入消息将放置在缓冲区中,最大大小为与 e 参数关联的缓冲区的总大小。 如果消息大于缓冲区,则缓冲区将填充消息的第一部分。
对于面向连接的套接字,该方法 ReceiveAsync 可以通过两种方式之一指示虚拟线路的正常终止,具体取决于套接字是字节流还是面向消息。 对于字节流,已读取的零个字节表示正常关闭,并且不再读取任何字节。 对于面向消息的套接字,如果允许使用零字节消息,SocketExceptionSocketAsyncEventArgs.SocketError则会使用设置为本机 Winsock WSAEDISCON 错误代码 (10101) 来指示正常关闭。 在任何情况下, SocketException 将 SocketAsyncEventArgs.SocketError 设置为本机 Winsock WSAECONNRESET 错误代码(10054)表示已中止关闭。