Socket.BeginSendTo 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í.
Envía datos de forma asincrónica a un host remoto concreto.
public:
IAsyncResult ^ BeginSendTo(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 BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginSendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginSendTo (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult
Parámetros
- offset
- Int32
Posición de base cero en el parámetro buffer
donde comienza el envío de datos.
- size
- Int32
Número de bytes para enviar.
- socketFlags
- SocketFlags
Combinación bit a bit de los valores de SocketFlags.
- callback
- AsyncCallback
Delegado AsyncCallback.
- state
- Object
Objeto que contiene la información de estado para esta solicitud.
Devoluciones
IAsyncResult que hace referencia al envío asincrónico.
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 AsyncCallbackBeginSendTo 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 BeginSendTo. 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 BeginSendTo método .
La BeginSendTo operación debe completarse llamando al EndSendTo método . Normalmente, el delegado proporcionado AsyncCallback invoca el método . EndSendTo bloqueará el subproceso que realiza la llamada hasta que se complete la operación.
Si usa un protocolo orientado a la conexión, primero debe llamar al Connectmétodo , BeginConnect, Accepto BeginAccept , o BeginSendTo producirá una SocketExceptionexcepción .
BeginSendTo omitirá el remoteEP
parámetro y enviará datos al EndPoint objeto establecido en el Connectmétodo , BeginConnect, Accepto BeginAccept .
Si usa un protocolo sin conexión, no es necesario establecer un host remoto predeterminado con el Connect método o BeginConnect antes de llamar SendToa . Solo tiene que hacerlo si piensa llamar al BeginSend método . Si llama al Connect método o BeginConnect antes de llamar SendToa , el remoteEP
parámetro invalidará el host remoto predeterminado especificado para esa operación de envío. Tampoco es necesario llamar al Bind método . En este caso, el proveedor de servicios subyacente asignará la dirección de red local y el número de puerto más adecuados. Use un número de puerto de cero si desea que el proveedor de servicios subyacente seleccione un puerto libre. Si necesita identificar la dirección de red local asignada y el número de puerto, puede usar la LocalEndPoint propiedad después de que el EndSendTo método se complete correctamente.
Si desea enviar datos a una dirección de difusión, primero debe llamar al SetSocketOption método y establecer la opción de socket en SocketOptionName.Broadcast. -También debe asegurarse de que el tamaño del búfer no supere el tamaño máximo del paquete del proveedor de servicios subyacente. Si es así, el datagrama no se enviará y EndSendTo producirá una SocketExceptionexcepción .
Si especifica la DontRoute marca como parámetro socketflags
, los datos que envía no se enrutarán.
Nota
Si recibe un SocketException, use la SocketException.ErrorCode propiedad para obtener el código de error específico. Después de obtener este código, consulte la documentación del código de error de la API de Windows Sockets versión 2 para obtener una descripción detallada del error.
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.