Socket.SendToAsync(SocketAsyncEventArgs) Método

Definição

Envia dados de forma assíncrona para um host remoto específico.

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

Parâmetros

e
SocketAsyncEventArgs

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

Não RemoteEndPoint podem ser nulas.

Uma operação de socket já estava em curso usando o SocketAsyncEventArgs objeto especificado no e parâmetro.

O Socket local foi encerrado.

O protocolo especificado é orientado à ligação, mas o Socket ainda não está ligado.

Observações

O SendToAsync método inicia uma operação de envio assíncrona para o host remoto especificado na SocketAsyncEventArgs.RemoteEndPoint propriedade do e parâmetro. Chamar o SendToAsync método dá-lhe a capacidade de enviar dados dentro de um thread de execução separado. Embora este método seja destinado a protocolos sem conexão, SendToAsync funciona tanto com protocolos sem ligação como orientados à ligação.

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.

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

Se estiver a usar um protocolo orientado à ligação, deve primeiro chamar o Accept, AcceptAsync, BeginAccept, BeginConnect, Connect, ou ConnectAsync método. Caso contrário, SendToAsync lançará um SocketException. Ao usar um protocolo orientado à ligação, o SendToAsync método ignora a SocketAsyncEventArgs.RemoteEndPoint propriedade e envia dados para o System.Net.EndPoint estabelecido no Accept, AcceptAsync, BeginAccept, BeginConnect, Connect, ou ConnectAsync método.

Se estiver a usar um protocolo sem conexão, não precisa de estabelecer um host remoto predefinido com o BeginConnect, Connect, ou ConnectAsync método antes de chamar SendToAsync. Só precisas de fazer isto se tencionares chamar os BeginSend métodos ou SendAsync . Se chamar o BeginConnect, , ou ConnectAsync método antes de chamar SendToAsync, a SocketAsyncEventArgs.RemoteEndPoint propriedade irá sobrepor o host remoto predefinido especificado apenas para essa operação Connectde envio. Também não é obrigado a ligar para o Bind método. Neste caso, o fornecedor de serviços subjacente atribuirá o endereço IP local e o número de porta mais apropriados. Use um número de porta zero se quiser que o fornecedor de serviço subjacente selecione uma porta livre. Se precisar de identificar o endereço IP de rede local atribuído e o número de porta, pode usar a LocalEndPoint propriedade depois de o SocketAsyncEventArgs.Completed evento ser sinalizado e os delegados associados serem chamados.

Se quiser enviar dados para um endereço de broadcast, deve primeiro chamar o SetSocketOption método e definir a opção socket para SocketOptionName.Broadcast true. Deve também garantir que o tamanho do seu buffer não excede o tamanho máximo do pacote do fornecedor de serviço subjacente. Se o fizer, o datagrama não será enviado e SendToAsync irá lançar um SocketException.

Se especificar a flag DontRoute na SocketAsyncEventArgs.SocketFlags propriedade, os dados que está a enviar não serão encaminhados.

Para sockets orientados a mensagens, deve ter-se cuidado para não exceder o tamanho máximo da mensagem do transporte subjacente. Se o tamanho do buffer exceder o tamanho máximo do pacote do fornecedor de serviço subjacente, o datagrama não é enviado e SendToAsync irá lançar um SocketException. A conclusão bem-sucedida de um SendToAsync método não indica que os dados foram entregues com sucesso.

Aplica-se a

Ver também