Compartilhar via


Socket.BeginSendTo Método

Definição

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

buffer
Byte[]

Uma matriz do tipo Byte que contém os dados a serem enviados.

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.

remoteEP
EndPoint

Um EndPoint que representa o dispositivo remoto.

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

buffer é null.

- ou -

remoteEP é null.

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

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

Aplica-se a

Confira também