Compartir por


Socket.SendPacketsAsync(SocketAsyncEventArgs) Método

Definición

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

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 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

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

Una operación de socket ya estaba en curso mediante el SocketAsyncEventArgs objeto especificado en el e parámetro .

no Socket está conectado a un host remoto.

Se usa una conexión sin Socket conexión y el archivo que se envía supera el tamaño máximo del paquete del transporte subyacente.

Comentarios

El SendPacketsAsync método se usa para enviar una colección de archivos o en búferes de datos de memoria al host remoto. Socket Ya 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 adjuntar la devolución de llamada al SocketAsyncEventArgs.Completed evento.

La SocketAsyncEventArgs.SendPacketsFlags propiedad del e parámetro proporciona al proveedor de servicios De 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 el 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 las API en modo de usuario y kernel. 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 estado de espera alertable

Se aplica a

Consulte también