Socket.SendPacketsAsync(SocketAsyncEventArgs) Método

Definición

Envía de forma asincrónica una colección de archivos o búferes de datos en memoria a un objeto Socket conectado.

public:
 bool SendPacketsAsync(System::Net::Sockets::SocketAsyncEventArgs ^ e);
public bool SendPacketsAsync (System.Net.Sockets.SocketAsyncEventArgs e);
member this.SendPacketsAsync : System.Net.Sockets.SocketAsyncEventArgs -> bool
Public Function SendPacketsAsync (e As SocketAsyncEventArgs) As Boolean

Parámetros

e
SocketAsyncEventArgs

Objeto SocketAsyncEventArgs que se usa para esta operación de socket asincrónica.

Devoluciones

Devuelve true si la operación de E/S está pendiente. Al completar la operación se provoca el evento Completed del parámetro e.

Devuelve false si la operación de E/S se ha completado de forma sincrónica. En ese caso, el evento Completed del parámetro e no se provoca y el objeto e que se pasa como parámetro puede examinarse inmediatamente después de que se devuelva la llamada al método para recuperar el resultado de la operación.

Excepciones

No se encontró el archivo especificado en la propiedad FilePath.

Ya hay una operación de socket en curso que utiliza el objeto SocketAsyncEventArgs especificado en el parámetro e.

Socket no está conectada a un host remoto.

El Socket se ha cerrado.

Se está usando un Socket sin conexión y el archivo que se está enviando supera el tamaño de paquete máximo del transporte subyacente.

Comentarios

El SendPacketsAsync método se usa para enviar una colección de archivos o búferes de datos en memoria al host remoto. Ya Socket debe estar conectado al host remoto.

Si hace System.Net.Sockets.SendPacketsElement referencia a un archivo en el directorio de trabajo, se puede identificar con solo el nombre del archivo; de lo contrario, se debe especificar la ruta de acceso completa y el nombre del archivo. Se admiten caracteres comodín y nombres de recursos compartidos UNC. Si no se encuentra el archivo, FileNotFoundException se produce .

Para recibir una notificación de finalización, debe crear un método de devolución de llamada que implemente el delegado EventHandler<SocketAsyncEventArgs> y adjunte la devolución de llamada al SocketAsyncEventArgs.Completed evento.

La SocketAsyncEventArgs.SendPacketsFlags propiedad del e parámetro proporciona al proveedor de servicios Sockets de ventana información adicional sobre la transferencia de archivos. Para obtener más información sobre cómo usar este parámetro, vea TransmitFileOptions.

Se requieren las siguientes propiedades y eventos en el System.Net.Sockets.SocketAsyncEventArgs objeto para llamar correctamente a este método:

El autor de la llamada puede establecer la SocketAsyncEventArgs.UserToken propiedad en cualquier objeto de estado de usuario deseado antes de llamar al SendPacketsAsync 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.

Este método usa la función TransmitPackets que se encuentra en la API de Windows Sockets 2. Para obtener más información sobre la función TransmitPackets y sus marcas, consulte la documentación de Windows Sockets .

Aunque está pensado para protocolos orientados a la conexión, el SendPacketsAsync método también funciona para protocolos sin conexión, siempre que primero llame al BeginConnectmétodo , Connecto ConnectAsync para establecer un host remoto predeterminado. Con los protocolos sin conexión, también debe asegurarse de que el tamaño del archivo no supere el tamaño máximo del paquete del proveedor de servicios subyacente. Si es así, el datagrama no se envía y SendPacketsAsync produce una SocketException excepción.

El SendPacketsAsync método se optimiza según el sistema operativo en el que se usa. En las ediciones de Windows Server, el SendPacketsAsync método está optimizado para un alto rendimiento.

En las ediciones de cliente de Windows, el SendPacketsAsync método está optimizado para un uso mínimo de memoria y recursos.

El uso de la TransmitFileOptions.UseKernelApc marca en la SocketAsyncEventArgs.SendPacketsFlags propiedad del e parámetro puede ofrecer ventajas significativas de rendimiento. Si el subproceso que inicia la SendPacketsAsync llamada al método se usa para cálculos pesados, es posible, aunque poco probable, que se podrían impedir que se inicien las API. Tenga en cuenta que hay una diferencia entre el kernel y las API en modo de usuario. Las API de kernel se inician cuando un subproceso está en un estado de espera. Las API en modo de usuario se inician cuando un subproceso está en un estado de espera alertable

Se aplica a

Consulte también