Socket.BeginReceiveFrom 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 a recibir asincrónicamente los datos de un dispositivo de red especificado.
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
Parámetros
- buffer
- Byte[]
Matriz de tipo Byte que constituye la ubicación de almacenamiento de los datos recibidos.
- offset
- Int32
Posición de base cero del parámetro buffer
donde se almacenarán los datos.
- size
- Int32
Número de bytes que se va a recibir.
- socketFlags
- SocketFlags
Combinación bit a bit de los valores de SocketFlags.
- remoteEP
- EndPoint
Referencia a un EndPoint de igual tipo que el punto de conexión del host remoto que se va a actualizar al recibir sincrónicamente.
- callback
- AsyncCallback
Delegado AsyncCallback.
- state
- Object
Objeto que contiene la información de estado para esta solicitud.
Devoluciones
IAsyncResult que hace referencia a la lectura asincrónica.
Excepciones
Solo .NET Framework y .NET 5 y versiones anteriores: se produjo un error al intentar acceder al socket.
offset
es menor que 0.
O bien
offset
es mayor que la longitud de buffer
.
O bien
size
es menor que 0.
o bien
size
es mayor que la longitud de buffer
menos el valor del parámetro offset
.
El Socket se ha cerrado.
Un llamador de la pila de llamadas no tiene permiso para la operación solicitada.
Comentarios
Importante
Se trata de una API de compatibilidad. No se recomienda usar los métodos de APM (Begin*
y End*
) para el nuevo desarrollo. En su lugar, use los Task
equivalentes basados en .
Puede pasar una devolución de llamada que se AsyncCallbackBeginReceiveFrom implemente en para recibir una notificación sobre la finalización de la operación. Tenga en cuenta que si la pila de red subyacente completa la operación de forma sincrónica, la devolución de llamada se ejecutará en línea, durante la llamada a BeginReceiveFrom. En este caso, la CompletedSynchronously propiedad del devuelto IAsyncResult se establecerá true
en para indicar que el método se completó sincrónicamente. Utilice la AsyncState propiedad de IAsyncResult para obtener el objeto de estado pasado al BeginReceiveFrom método .
La operación asincrónica BeginReceiveFrom debe completarse llamando al EndReceiveFrom método . Normalmente, el delegado invoca el AsyncCallback método . EndReceiveFrom bloqueará el subproceso que realiza la llamada hasta que se complete la operación.
Este método lee los datos en el buffer
parámetro y captura el punto de conexión del host remoto desde el que se envían los datos. Para obtener información sobre cómo recuperar este punto de conexión, consulte EndReceiveFrom. Este método es más útil si tiene previsto recibir de forma asincrónica datagramas sin conexión de un host desconocido o de varios hosts. En estos casos, BeginReceiveFrom leerá el primer datagrama en cola recibido en el búfer de red local. Si el datagrama que recibe es mayor que el tamaño de buffer
, el BeginReceiveFrom método se rellenará buffer
con la mayor cantidad posible del mensaje y producirá una SocketExceptionexcepción . Si usa un protocolo no confiable, se perderán los datos sobrantes. Si usa un protocolo confiable, el proveedor de servicios conservará los datos excesivos y podrá recuperarlos llamando al BeginReceiveFrom método con un búfer lo suficientemente grande.
Para garantizar que siempre se devuelve el punto de conexión del host remoto, una aplicación debe enlazar explícitamente el Socket objeto a un punto de conexión local mediante el Bind método y, a continuación, llamar al SetSocketOption método con el optionLevel
parámetro establecido IP en o IPv6 según corresponda, el optionName
parámetro establecido PacketInformationen y el optionValue
parámetro para habilitar esta opción antes de llamar al BeginReceiveFrom método . De lo contrario, es posible que el punto de conexión del host remoto no se devuelva cuando el remitente haya enviado un número de datagramas antes de que el receptor haya llamado al BeginReceiveFrom método .
Aunque BeginReceiveFrom está pensado para protocolos sin conexión, también puede usar un protocolo orientado a la conexión. Si decide hacerlo, primero debe establecer una conexión de host remota llamando al Connect / BeginConnect método o aceptando una solicitud de conexión entrante llamando al Accept método o .BeginAccept Si llama al BeginReceiveFrom método antes de establecer o aceptar una conexión, obtendrá un SocketException. También puede establecer un host remoto predeterminado para un protocolo sin conexión antes de llamar al BeginReceiveFrom método .
El remoteEp
parámetro
Con sockets orientados a la conexión, BeginReceiveFrom leerá tantos datos como estén disponibles hasta el número de bytes especificados por el size
parámetro .
Para cancelar un pendiente BeginReceiveFrom, llame al Close método .
Nota
Si recibe un SocketException, use la SocketException.ErrorCode propiedad para obtener el código de error específico.
Nota
Este miembro genera información de seguimiento cuando se habilita el seguimiento de red en la aplicación. Para obtener más información, vea Seguimiento de red en .NET Framework.
Nota
El contexto de ejecución (el contexto de seguridad, el usuario suplantado y el contexto de llamada) se almacena en caché para los métodos asincrónicos Socket . Después del primer uso de un contexto determinado (un método asincrónico Socket específico, una instancia específica Socket y una devolución de llamada específica), los usos posteriores de ese contexto verán una mejora del rendimiento.