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