Socket.ReceiveAsync(SocketAsyncEventArgs) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Comienza una solicitud asincrónica para recibir datos de un objeto conectado 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
Parámetros
Objeto SocketAsyncEventArgs que se va a usar para esta operación de socket asincrónico.
Devoluciones
true si la operación de E/S está pendiente. El Completed evento en el e parámetro se generará tras la finalización de la operación.
false si la operación de E/S se completó sincrónicamente. En este caso, Completed no se generará el evento en el e parámetro y el e objeto pasado como parámetro se puede examinar inmediatamente después de que la llamada al método devuelva para recuperar el resultado de la operación.
Excepciones
Un argumento no era válido. Las Buffer propiedades o BufferList del e parámetro deben hacer referencia a búferes válidos. Se puede establecer una o la otra de estas propiedades, pero no ambas al mismo tiempo.
Una operación de socket ya estaba en curso mediante el SocketAsyncEventArgs objeto especificado en el e parámetro .
Se Socket ha cerrado.
Error al intentar acceder al socket.
Comentarios
El ReceiveAsync método se usa en sockets conectados o sockets sin conexión enlazados y se usa para leer los datos entrantes. La dirección local del socket debe conocerse.
En el caso de los sockets sin conexión enlazados, esta función restringe las direcciones desde las que se aceptan los mensajes recibidos. La función solo devuelve mensajes de la dirección remota especificada en la conexión. Los mensajes de otras direcciones se descartan silenciosamente.
La SocketAsyncEventArgs.SocketFlags propiedad del e parámetro proporciona al proveedor de servicios De sockets de ventana información adicional sobre la solicitud de lectura. Para obtener más información sobre cómo usar este parámetro, vea System.Net.Sockets.SocketFlags.
Se requieren las siguientes propiedades y eventos en el System.Net.Sockets.SocketAsyncEventArgs objeto para llamar correctamente a este método:
SocketAsyncEventArgs.Buffer o SocketAsyncEventArgs.BufferList
SocketAsyncEventArgs.Count si SocketAsyncEventArgs.Buffer se establece
SocketAsyncEventArgs.Offset si SocketAsyncEventArgs.Buffer se establece
El autor de la llamada puede establecer la SocketAsyncEventArgs.UserToken propiedad en cualquier objeto de estado de usuario deseado antes de llamar al ReceiveAsync método , de modo que la información se pueda recuperar en el método de devolución de llamada. Si la devolución de llamada necesita más información que un único objeto, se puede crear una clase pequeña para contener la otra información de estado necesaria como miembros.
En el caso de los sockets de estilo de secuencia de bytes, los datos entrantes se colocan en el búfer hasta que se rellena el búfer, se cierra la conexión o se agotan los datos almacenados internamente en búfer.
En el caso de los sockets orientados a mensajes, un mensaje entrante se coloca en el búfer hasta el tamaño total del búfer asociado al e parámetro . Si el mensaje es mayor que el búfer, el búfer se rellena con la primera parte del mensaje.
En el caso de los sockets orientados a la conexión, el ReceiveAsync método puede indicar la terminación correcta del circuito virtual de una de estas dos maneras que dependen de si el socket está orientado a secuencias de bytes o mensajes. En el caso de las secuencias de bytes, cero bytes que se han leído indica el cierre correcto y que nunca se leerán más bytes. En el caso de los sockets orientados a mensajes, donde a menudo se permite un mensaje de bytes cero, un SocketException con el SocketAsyncEventArgs.SocketError establecido en el código de error nativo de Winsock WSAEDISCON (10101) se usa para indicar un cierre correcto. En cualquier caso, un SocketException con establecido SocketAsyncEventArgs.SocketError en el código de error nativo de Winsock WSAECONNRESET (10054) indica que se ha producido un cierre anulativo.