Socket.BeginSendTo 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 maneira assíncrona para um host remoto específico.
public:
IAsyncResult ^ BeginSendTo(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ remoteEP, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginSendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginSendTo (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult
Parâmetros
- offset
- Int32
A posição de base zero no buffer
na qual começar a enviar dados.
- size
- Int32
O número de bytes a serem enviados.
- socketFlags
- SocketFlags
Uma combinação bit a bit dos valores SocketFlags.
- callback
- AsyncCallback
O delegado AsyncCallback.
- state
- Object
Um objeto que contém informações de estado para essa solicitação.
Retornos
Um IAsyncResult que faz referência ao envio assíncrono.
Exceções
.NET Framework e .NET 5 e somente anteriores: ocorreu um erro ao tentar acessar o soquete.
offset
é menor que 0.
- ou -
offset
é maior que o comprimento do buffer
.
- ou -
size
é menor que 0.
- ou -
size
é maior que o comprimento da subtração de buffer
e do valor do parâmetro offset
.
O Socket foi fechado.
Um chamador mais alto na pilha de chamadas não tem permissão para a operação solicitada.
Comentários
Importante
Essa é uma API de compatibilidade. Não recomendamos usar os métodos APM (Begin*
e End*
) para novo desenvolvimento. Em vez disso, use os Task
equivalentes baseados em .
Você pode passar um retorno de chamada que implementa AsyncCallback para BeginSendTo ser notificado sobre a conclusão da operação. Observe que, se a pilha de rede subjacente concluir a operação de forma síncrona, o retorno de chamada será executado embutido durante a chamada para BeginSendTo. Nesse caso, a CompletedSynchronously propriedade no retornado IAsyncResult será definida como true
para indicar que o método foi concluído de forma síncrona. Use a AsyncState propriedade do IAsyncResult para obter o objeto de estado passado para o BeginSendTo método .
A BeginSendTo operação deve ser concluída chamando o EndSendTo método . Normalmente, o método é invocado pelo delegado fornecido AsyncCallback . EndSendTo bloqueará o thread de chamada até que a operação seja concluída.
Se você estiver usando um protocolo orientado à conexão, deverá primeiro chamar o Connectmétodo , BeginConnect, Acceptou BeginAccept ou BeginSendTo gerará um SocketException.
BeginSendTo ignorará o remoteEP
parâmetro e enviará dados para o EndPoint estabelecido no Connectmétodo , BeginConnect, Acceptou BeginAccept .
Se você estiver usando um protocolo sem conexão, não precisará estabelecer um host remoto padrão com o Connect método ou BeginConnect antes de chamar SendTo. Você só precisa fazer isso se pretende chamar o BeginSend método . Se você chamar o Connect método ou BeginConnect antes de chamar SendTo, o remoteEP
parâmetro substituirá o host remoto padrão especificado somente para essa operação de envio. Você também não precisa chamar o Bind método . Nesse caso, o provedor de serviços subjacente atribuirá o endereço de rede local e o número da porta mais apropriados. 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 de rede local atribuído e o número da porta, poderá usar a LocalEndPoint propriedade depois que o EndSendTo método for concluído com êxito.
Se você quiser enviar dados para um endereço de transmissão, primeiro chame o SetSocketOption método e defina a opção de soquete como SocketOptionName.Broadcast. -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 EndSendTo gerará um SocketException.
Se você especificar o DontRoute sinalizador como o socketflags
parâmetro , os dados que você está enviando não serão roteado.
Observação
Se você receber um SocketException, use a SocketException.ErrorCode propriedade para obter o código de erro específico. Depois de obter esse código, consulte a documentação do código de erro da API do Windows Sockets versão 2 para obter uma descrição detalhada do erro.
Observação
Esse membro emite o rastreamento de informações quando você ativa o rastreamento de rede em seu aplicativo. Para obter mais informações, consulte Rastreamento de rede em .NET Framework.
Observação
O contexto de execução (o contexto de segurança, o usuário representado e o contexto de chamada) é armazenado em cache para os métodos assíncronos Socket . Após o primeiro uso de um contexto específico (um método assíncrono Socket específico, uma instância específica Socket e um retorno de chamada específico), os usos subsequentes desse contexto verão uma melhoria de desempenho.