Socket.SendPacketsAsync(SocketAsyncEventArgs) Método

Definição

Envia uma coleção de arquivos ou buffers de dados na memória assincronamente para um 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

O objeto SocketAsyncEventArgs a ser usado nessa operação de soquete assíncrono.

Retornos

true se a operação de E/S está pendente. O evento Completed no parâmetro e será acionado após a conclusão da operação.

false se a operação de E/S foi concluída de forma síncrona. Nesse caso, o evento Completed no parâmetro e não será gerado e o objeto e passado como um parâmetro poderá ser examinado imediatamente depois que a chamada do método for retornada para recuperar o resultado da operação.

Exceções

O arquivo especificado na propriedade FilePath não foi encontrado.

Uma operação de soquete já estava em andamento com o objeto SocketAsyncEventArgs especificado no parâmetro e.

O Socket não está conectado a um host remoto.

Um Socket sem conexão está sendo usado e o arquivo sendo enviado excede o tamanho máximo do pacote de transporte subjacente.

Comentários

O SendPacketsAsync método é usado para enviar uma coleção de arquivos ou em buffers de dados de memória para o host remoto. O Socket já deve estar conectado ao host remoto.

Se um System.Net.Sockets.SendPacketsElement referenciar um arquivo no diretório de trabalho, ele poderá ser identificado apenas com o nome do arquivo; caso contrário, o caminho completo e o nome do arquivo deverão ser especificados. Há suporte para curingas e nomes de compartilhamento UNC. Se o arquivo não for encontrado, FileNotFoundException será gerado.

Para ser notificado sobre a conclusão, você deve criar um método de retorno de chamada que implementa o delegado EventHandler<SocketAsyncEventArgs> e anexar o retorno de chamada ao SocketAsyncEventArgs.Completed evento.

A SocketAsyncEventArgs.SendPacketsFlags propriedade no e parâmetro fornece ao provedor de serviços Window Sockets informações adicionais sobre a transferência de arquivo. Para obter mais informações sobre como usar esse parâmetro, consulte TransmitFileOptions.

As seguintes propriedades e eventos no System.Net.Sockets.SocketAsyncEventArgs objeto são necessários para chamar esse método com êxito:

O chamador pode definir a SocketAsyncEventArgs.UserToken propriedade como qualquer objeto de estado de usuário desejado antes de chamar o SendPacketsAsync método, para que as informações sejam recuperadas no método de retorno de chamada. Se o retorno de chamada precisar de mais informações do que um único objeto, uma classe pequena poderá ser criada para manter as outras informações de estado necessárias como membros.

Esse método usa a função TransmitPackets encontrada na API do Windows Sockets 2. Para obter mais informações sobre a função TransmitPackets e seus sinalizadores, consulte a documentação do Windows Sockets .

Embora pretenda protocolos orientados a conexões, o SendPacketsAsync método também funciona para protocolos sem conexão, desde que você primeiro chame o BeginConnectmétodo , Connectou ConnectAsync para estabelecer um host remoto padrão. Com protocolos sem conexão, você também deve ter certeza de que o tamanho do arquivo não excede o tamanho máximo do pacote do provedor de serviços subjacente. Se isso acontecer, o datagrama não será enviado e SendPacketsAsync gerará uma SocketException exceção.

O SendPacketsAsync método é otimizado de acordo com o sistema operacional no qual ele é usado. Em edições do Windows Server, o SendPacketsAsync método é otimizado para alto desempenho.

Nas edições do cliente Windows, o SendPacketsAsync método é otimizado para utilização mínima de memória e recursos.

O uso do TransmitFileOptions.UseKernelApc sinalizador na SocketAsyncEventArgs.SendPacketsFlags propriedade no e parâmetro pode fornecer benefícios significativos de desempenho. Se o thread que inicia a SendPacketsAsync chamada de método estiver sendo usado para cálculos pesados, é possível, embora improvável, que as APCs possam ser impedidas de iniciar. Observe que há uma diferença entre os APCs do kernel e do modo de usuário. As APCs do kernel são iniciadas quando um thread está em um estado de espera. As APCs no modo de usuário são iniciadas quando um thread está em um estado de espera alertável

Aplica-se a

Confira também