Socket.SendPacketsAsync(SocketAsyncEventArgs) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Envia uma coleção de ficheiros ou buffers de dados em memória de forma assíncrona para um objeto ligado 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
O SocketAsyncEventArgs objeto a usar para esta operação de soquete assíncrono.
Devoluções
true se a operação de E/S estiver pendente. O Completed evento no e parâmetro será ativado após a conclusão da operação.
false se a operação de E/S fosse concluída de forma síncrona. Neste caso, o Completed evento sobre o e parâmetro não será levantado e o e objeto passado como parâmetro pode ser examinado imediatamente após o retorno da chamada ao método para recuperar o resultado da operação.
Exceções
O processo especificado na FilePath propriedade não foi encontrado.
Uma operação de socket já estava em curso usando o SocketAsyncEventArgs objeto especificado no e parâmetro.
Não Socket está ligado a um host remoto.
O Socket local foi encerrado.
Está a ser usado um conector Socket sem ligação e o ficheiro enviado excede o tamanho máximo do pacote do transporte subjacente.
Observações
O SendPacketsAsync método é usado para enviar uma coleção de ficheiros ou buffers de dados em memória para um host remoto. Devem Socket já estar ligados ao host remoto.
Se um System.Net.Sockets.SendPacketsElement faz referência a um ficheiro no diretório de trabalho, pode ser identificado apenas pelo nome do ficheiro; caso contrário, o caminho completo e o nome do ficheiro devem ser especificados. São suportados wildcards e nomes de ações da UNC. Se o ficheiro não for encontrado, FileNotFoundException é descartado.
Para ser notificado da conclusão, deve criar um método de callback que implemente o delegado EventHandler<SocketAsyncEventArgs> e anexar o callback ao SocketAsyncEventArgs.Completed evento.
A SocketAsyncEventArgs.SendPacketsFlags propriedade no e parâmetro fornece ao fornecedor de serviços Window Sockets informações adicionais sobre a transferência de ficheiros. Para mais informações sobre como usar este parâmetro, veja TransmitFileOptions.
As seguintes propriedades e eventos no System.Net.Sockets.SocketAsyncEventArgs objeto são necessárias para chamar com sucesso este método:
O chamador pode definir a SocketAsyncEventArgs.UserToken propriedade para qualquer objeto de estado do utilizador desejado antes de chamar o SendPacketsAsync método, de modo a que a informação seja recuperável no método de retorno. Se o callback precisar de mais informação do que um único objeto, pode ser criada uma pequena classe para conter as outras informações de estado necessárias como membros.
Este método utiliza a função TransmitPackets encontrada na API do Windows Sockets 2. Para mais informações sobre a função TransmitPackets e as suas flags, consulte a documentação Windows Sockets.
Embora destinado a protocolos orientados à ligação, o SendPacketsAsync método também funciona para protocolos sem conexão, desde que primeiro chame o BeginConnect, Connect, ou ConnectAsync método para estabelecer um host remoto predefinido. Com protocolos sem conexão, deve também garantir que o tamanho do seu ficheiro não excede o tamanho máximo do pacote do fornecedor de serviço subjacente. Se o fizer, o datagrama não é enviado e SendPacketsAsync lança uma SocketException exceção.
O SendPacketsAsync método é otimizado de acordo com o sistema operativo em que é utilizado. Nas edições Windows servidor, o método SendPacketsAsync está otimizado para alto desempenho.
Em Windows edições cliente, o método SendPacketsAsync é otimizado para uma utilização mínima de memória e recursos.
A utilização da TransmitFileOptions.UseKernelApc bandeira na SocketAsyncEventArgs.SendPacketsFlags propriedade no e parâmetro pode trazer benefícios significativos de desempenho. Se o thread que inicia a SendPacketsAsync chamada ao método estiver a ser usado para cálculos pesados, é possível, embora improvável, que os APCs possam ser impedidos de serem lançados. Note-se que existe uma diferença entre APCs kernel e APCs em modo utilizador. Os APCs do kernel são lançados quando um thread está em estado de espera. Os APCs em modo utilizador são lançados quando um thread está em estado de espera alerta