Socket.BeginReceiveFrom Método

Definição

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

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);
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[]

Um array do tipo Byte que é a localização de armazenamento dos dados recebidos.

offset
Int32

A posição baseada em zero no buffer parâmetro onde armazenar os dados.

size
Int32

O número de bytes a receber.

socketFlags
SocketFlags

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

remoteEP
EndPoint

Uma referência a um EndPoint do mesmo tipo que o endpoint do host remoto a ser atualizado na receção síncrona.

callback
AsyncCallback

O AsyncCallback delegado.

state
Object

Um objeto que contém informação de estado para este pedido.

Devoluções

E IAsyncResult que faz referência à leitura assíncrona.

Exceções

buffer é null.

-ou-

remoteEP é null.

Apenas framework .NET: Ocorreu um erro ao tentar aceder ao socket.

offset é inferior a 0.

-ou-

offset é maior do que o comprimento de buffer.

-ou-

size é inferior a 0.

-ou-

size é maior do que o comprimento de buffer menos o valor do offset parâmetro.

O Socket local foi encerrado.

Um chamador mais acima na pilha de chamadas não tem permissão para a operação solicitada.

Observações

Importante

Isto é uma API de compatibilidade. Não recomendamos o uso dos métodos APM (Begin* e End*) para novos desenvolvimentos. Em vez disso, use os Taskequivalentes baseados em .

Pode enviar um callback que implementa AsyncCallback para BeginReceiveFrom ser notificado sobre a conclusão da operação. Note que, se a pilha de rede subjacente completar a operação de forma síncrona, o callback será executado em linha, durante a chamada para BeginReceiveFrom. Neste caso, a CompletedSynchronously propriedade no retorno IAsyncResult será definida para true indicar que o método foi concluído de forma síncrona. Use a AsyncState propriedade de para IAsyncResult 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 irá bloquear o thread que chama até que a operação seja concluída.

Este método lê dados no buffer parâmetro e captura o endpoint remoto do host a partir do qual os dados são enviados. Para informações sobre como recuperar este endpoint, consulte EndReceiveFrom. Este método é mais útil se pretende receber datagramas sem ligação de forma assíncrona de um host desconhecido ou de múltiplos hosts. Nestes casos, BeginReceiveFrom irá ler o primeiro datagrama enfileirado recebido no buffer de rede local. Se o datagrama que receber for maior do 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 estiver a usar um protocolo pouco fiável, os dados em excesso serão perdidos. Se estiver a usar um protocolo fiável, os dados excedentes serão retidos pelo fornecedor de serviços e pode recuperá-los chamando o BeginReceiveFrom método com um buffer suficientemente grande.

Para garantir que o endpoint host remoto é sempre devolvido, uma aplicação deve associar explicitamente o Socket a um endpoint local usando o Bind método e depois chamar o SetSocketOption método com o optionLevel parâmetro definido para IP ou IPv6 conforme apropriado, o optionName parâmetro definido para PacketInformation, e o optionValue parâmetro para ativar esta opção antes de chamar o BeginReceiveFrom método. Caso contrário, é possível que o endpoint remoto do host não seja devolvido quando o remetente enviou vários datagramas antes de o recetor ter chamado o BeginReceiveFrom método.

Embora BeginReceiveFrom seja destinado a protocolos sem ligação, também pode usar um protocolo orientado à ligação. Se optar por isso, deve primeiro estabelecer uma ligação hosts remota chamando o Connect / BeginConnect método ou aceitar um pedido de ligação recebido ao chamar o Accept método ou BeginAccept . Se ligar ao BeginReceiveFrom método antes de estabelecer ou aceitar uma ligação, obterá um SocketException. Também pode estabelecer um host remoto predefinido para um protocolo sem ligação antes de chamar o BeginReceiveFrom método.

O parâmetro remoteEp

Com sockets orientados para ligação, BeginReceiveFrom lê tantos dados quanto estiver disponível até ao número de bytes especificados pelo size parâmetro.

Para cancelar um pedido pendente BeginReceiveFrom, ligue para o Close método.

Note

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

Note

Esse membro gera informações de rastreamento quando você habilita o rastreamento de rede em seu aplicativo. Para mais informações, consulte Network Tracing in .NET Framework.

Note

O contexto de execução (o contexto de segurança, o utilizador personificado e o contexto de chamada) é armazenado em cache para os métodos assíncronos Socket . Após a primeira utilização de um determinado contexto (um método assíncrono Socket específico, uma instância específica Socket e um callback específico), as utilizações subsequentes desse contexto verão uma melhoria de desempenho.

Aplica-se a

Ver também