Partilhar via


Socket.BeginReceiveFrom Método

Definição

Começa a receber dados de um dispositivo de rede especificado de maneira assíncrona.

public:
 IAsyncResult ^ BeginReceiveFrom(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 BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult

Parâmetros

buffer
Byte[]

Uma matriz do tipo Byte que é o local de armazenamento dos dados recebidos.

offset
Int32

A posição de base zero no parâmetro buffer no qual armazenar os dados.

size
Int32

O número de bytes a serem recebidos.

socketFlags
SocketFlags

Uma combinação bit a bit dos valores SocketFlags.

remoteEP
EndPoint

Uma referência a um EndPoint do mesmo tipo que o ponto de extremidade do host remoto a ser atualizado no recebimento síncrono.

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 à leitura assíncrona.

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 BeginReceiveFrom 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 BeginReceiveFrom. 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 BeginReceiveFrom método .

A operação assíncrona BeginReceiveFrom deve ser concluída chamando o EndReceiveFrom método . Normalmente, o método é invocado pelo AsyncCallback delegado. EndReceiveFrom bloqueará o thread de chamada até que a operação seja concluída.

Esse método lê dados no buffer parâmetro e captura o ponto de extremidade do host remoto do qual os dados são enviados. Para obter informações sobre como recuperar esse ponto de extremidade, consulte EndReceiveFrom. Esse método será mais útil se você pretende receber de forma assíncrona datagramas sem conexão de um host desconhecido ou vários hosts. Nesses casos, BeginReceiveFrom lerá o primeiro datagrama enfileirado recebido no buffer de rede local. Se o datagrama recebido for maior que o tamanho de buffer, o BeginReceiveFrom método preencherá buffer com o máximo possível da mensagem e lançará um SocketException. Se você estiver usando um protocolo não confiável, os dados em excesso serão perdidos. Se você estiver usando um protocolo confiável, os dados em excesso serão retidos pelo provedor de serviços e você poderá recuperá-los chamando o BeginReceiveFrom método com um buffer grande o suficiente.

Para garantir que o ponto de extremidade do host remoto seja sempre retornado, um aplicativo deve associar explicitamente o Socket a um ponto de extremidade local usando o Bind método e, em seguida, chamar o SetSocketOption método com o optionLevel parâmetro definido IP como ou IPv6 conforme apropriado, o optionName parâmetro definido PacketInformationcomo e o optionValue parâmetro para habilitar essa opção antes de chamar o BeginReceiveFrom método. Caso contrário, é possível que o ponto de extremidade do host remoto não seja retornado quando o remetente enviar vários datagramas antes que o receptor tenha chamado o BeginReceiveFrom método .

Embora seja BeginReceiveFrom destinado a protocolos sem conexão, você também pode usar um protocolo orientado a conexões. Se você optar por fazer isso, primeiro deverá estabelecer uma conexão de host remoto chamando o Connect / BeginConnect método ou aceitar uma solicitação de conexão de entrada chamando o Accept método ou .BeginAccept Se você chamar o BeginReceiveFrom método antes de estabelecer ou aceitar uma conexão, obterá um SocketException. Você também pode estabelecer um host remoto padrão para um protocolo sem conexão antes de chamar o BeginReceiveFrom método .

O remoteEp parâmetro

Com soquetes orientados à conexão, BeginReceiveFrom lerá o máximo de dados que estiver disponível até o número de bytes especificado pelo size parâmetro .

Para cancelar um pendente BeginReceiveFrom, chame o Close método .

Observação

Se você receber um SocketException, use a SocketException.ErrorCode propriedade para obter o código de erro específico.

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