El método SendPacketsAsync se utiliza para enviar al host remoto una colección de archivos o búferes de datos en memoria.
Socket
ya debe estar conectado al host remoto.
Si System.Net.Sockets.SendPacketsElement hace referencia a un archivo del directorio de trabajo, bastará el nombre de archivo para identificarlo; de lo contrario, se deberá especificar la ruta de acceso completa y el nombre de archivo. Se admiten caracteres comodín y nombres de recurso compartido UNC. Si no se encuentra el archivo, se produce una excepción FileNotFoundException.
Para que se notifique la realización, debe crear un método de devolución de llamada que implemente el delegado <SocketAsyncEventArgs> de EventHandler y asociar la devolución de llamada al evento SocketAsyncEventArgs.Completed.
La propiedad SocketAsyncEventArgs.SendPacketsFlags del parámetro e proporciona al proveedor de servicios de Windows Sockets información adicional sobre la transferencia de archivos. Para obtener más información sobre cómo utilizar este parámetro, vea TransmitFileOptions.
Los eventos y propiedades siguientes del objeto System.Net.Sockets.SocketAsyncEventArgs son necesarios para llamar correctamente a este método:
El llamador puede establecer la propiedad SocketAsyncEventArgs.UserToken en cualquier objeto de estado de usuario que desee antes de llamar al método SendPacketsAsync de modo que la información pueda recuperarse en el método de devolución de llamada. Si la devolución de llamada necesita más información que un solo objeto, puede crearse una pequeña clase que contenga el resto de la información de estado requerida como miembros.
Este método usa la función TransmitPackets de la API de Windows Sockets, versión 2. Para obtener más información sobre la función TransmitPackets y sus marcadores, vea la documentación sobre Windows Sockets en MSDN Library.
Si bien está pensado para los protocolos orientados a la conexión, el método SendPacketsAsync también sirve para los protocolos sin conexión, siempre que se llame primero al método BeginConnect, Connect o ConnectAsync para establecer un host remoto predeterminado. Con protocolos sin conexión, también es importante asegurarse de que el tamaño del archivo no supera el tamaño máximo de paquetes del proveedor de servicios subyacente. Si así fuera, el datagrama no se enviará y SendPacketsAsync producirá una excepción SocketException.
El método SendPacketsAsync se optimiza según el sistema operativo en el que se usa. En ediciones de servidor de Windows, el método SendPacketsAsync se optimiza para el máximo rendimiento.
En las ediciones de cliente de Windows, el método SendPacketsAsync se optimiza para la mínima utilización de memoria y recursos.
El uso del marcador TransmitFileOptions.UseKernelApc en la propiedad SocketAsyncEventArgs.SendPacketsFlags del parámetro e puede proporcionar ventajas de rendimiento significativas. Si el subproceso que inicia la llamada al método SendPacketsAsync se usa para cálculos complejos, es posible, aunque improbable, que se impida el inicio de las APC. Observe que hay una diferencia entre las APC de kernel y de modo usuario. Las APC del kernel se inician cuando un subproceso está en espera. Las APC de modo usuario se inician cuando un subproceso está en un estado de espera en alerta.