Socket.SendToAsync(SocketAsyncEventArgs) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 ser usado para esta operação de soquete assíncrona.
Retornos
true se a operação de E/S estiver pendente. O Completed evento no e parâmetro será gerado após a conclusão da operação.
false se a operação de E/S for concluída de forma síncrona. Nesse caso, Completed o e evento no parâmetro não será gerado e o e objeto passado como um parâmetro poderá ser examinado imediatamente após a chamada do método retornar para recuperar o resultado da operação.
Exceções
Não RemoteEndPoint pode ser nulo.
Uma operação de soquete já estava em andamento usando o SocketAsyncEventArgs objeto especificado no e parâmetro.
O Socket foi fechado.
O protocolo especificado é orientado à conexão, mas ainda Socket não está conectado.
Comentários
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 oferece a capacidade de enviar dados em um thread de execução separado. Embora esse método seja destinado a protocolos sem conexão, SendToAsync funciona com protocolos sem conexão e orientados à conexão.
Para ser notificado sobre a conclusão, você deve criar um método de retorno de chamada que implemente o delegado EventHandler<SocketAsyncEventArgs> e anexe o retorno de chamada ao SocketAsyncEventArgs.Completed evento.
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 para qualquer objeto de estado de usuário desejado antes de chamar o SendToAsync método, para que as informações sejam recuperáveis 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.
Se você estiver usando um protocolo orientado à conexão, primeiro deverá chamar o Acceptmétodo, , AcceptAsync, BeginAccept, BeginConnectConnectou ConnectAsync método. Caso contrário SendToAsync , lançará um SocketException. Ao usar um protocolo orientado à conexão, o SendToAsync método ignorará a SocketAsyncEventArgs.RemoteEndPoint propriedade e enviará dados para o System.Net.EndPoint método estabelecido no Acceptmétodo , AcceptAsync, , BeginAcceptBeginConnect, ConnectouConnectAsync.
Se você estiver usando um protocolo sem conexão, não precisará estabelecer um host remoto padrão com o BeginConnectmétodo , Connectou ConnectAsync antes de chamar SendToAsync. Você só precisará fazer isso se pretender chamar os métodos ou BeginSend os SendAsync métodos. Se você chamar o BeginConnectmétodo , Connectou ConnectAsync método antes da chamada SendToAsync, a SocketAsyncEventArgs.RemoteEndPoint propriedade substituirá o host remoto padrão especificado apenas para essa operação de envio. Você também não é obrigado a chamar o Bind método. Nesse caso, o provedor de serviços subjacente atribuirá o endereço IP de rede local mais apropriado e o número da porta. Use um número de porta zero se desejar que o provedor de serviços subjacente selecione uma porta gratuita. Se você precisar identificar o endereço IP da rede local atribuído e o número da porta, poderá usar a LocalEndPoint propriedade depois que o SocketAsyncEventArgs.Completed evento for sinalizado e os delegados associados forem chamados.
Se você quiser enviar dados para um endereço de transmissão, primeiro deve chamar o SetSocketOption método e definir a opção de soquete como SocketOptionName.Broadcast true. Você também deve ter certeza de que o tamanho do buffer 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 SendToAsync gerará um SocketException.
Se você especificar o sinalizador DontRoute na SocketAsyncEventArgs.SocketFlags propriedade, os dados que você está enviando não serão roteado.
Para soquetes orientados a mensagens, deve-se tomar 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 provedor de serviços subjacente, o datagrama não será enviado e SendToAsync gerará um SocketException. A conclusão bem-sucedida de um SendToAsync método não indica que os dados foram entregues com êxito.