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