Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Método Socket.ReceiveFrom (Byte[], SocketFlags, EndPoint)

Recebe uma datagrama no buffer de dados, usando SocketFlagsespecificado, e armazena o ponto de extremidade.

Namespace:  System.Net.Sockets
Assembly:  System (em System.dll)

public int ReceiveFrom(
	byte[] buffer,
	SocketFlags socketFlags,
	ref EndPoint remoteEP
)

Parâmetros

buffer
Tipo: System.Byte[]
Uma Matriz do tipo Byte que é o local de armazenamento para os dados recebidos.
socketFlags
Tipo: System.Net.Sockets.SocketFlags
Um combinação bit a bit dos valores de SocketFlags .
remoteEP
Tipo: System.Net.EndPoint
EndPoint , passada por referência, que representa o servidor remoto.

Valor de retorno

Tipo: System.Int32
O número de bytes recebidos.

ExceçãoCondição
ArgumentNullException

buffer é null.

- ou -

remoteEP é null.

SocketException

Um erro ocorreu ao tentar acessar o soquete. Consulte a seção comentários para mais informações.

ObjectDisposedException

Socket foi fechada.

SecurityException

Um chamador na pilha de chamadas não possui as permissões de associação.

O método de ReceiveFrom ler dados no parâmetro de buffer , retorna o número de bytes lida com êxito, e captura o ponto final do host remoto dos dados que foram enviados. Este método é útil se você pretende receber datagramas sem conexão de um host desconhecido ou um host de vários.

Essa sobrecarga requer somente fornecer um buffer de recebimento, SocketFlagsnecessário, e EndPoint que representa o host remoto. O deslocamento tem como padrão para 0 e o tamanho tem como padrão o comprimento do buffer.

ObservaçãoObservação

Antes de chamar o ReceiveFrom, você deve explicitamente Socket associar a um ponto de extremidade local usando o método de Bind . Se você não fizer isso, o ReceiveFrom irá acionar SocketException.

Com protocolos sem conexão, o ReceiveFrom ler a primeira datagrama enviada para a fila recebida no buffer de rede local. Se a datagrama que você recebe é maior do que o tamanho de buffer, o método de ReceiveFrom preencherá com buffer tanto quanto de mensagem quanto for possível, e irá acionar SocketException. Se você estiver usando um protocolo não confiável, os dados adicionais serão perdidos. Se você estiver usando um protocolo confiável, os dados adicionais serão mantidas pelo provedor de serviços e você pode recupera chamando o método de ReceiveFrom com um grande o suficiente buffer.

Se nenhum dados está disponível para ler, o método de ReceiveFrom bloqueará até que os dados estão disponíveis. Se você estiver no modo que não são de bloqueio, e não houver dados disponível no buffer de protocolo a pilha, o método de ReceiveFrom concluirá imediatamente e irá acionar SocketException. Você pode usar a propriedade Available para determinar se os dados estão disponíveis para leitura. Quando Available é diferente de zero, repita a operação de receptor.

Embora o ReceiveFrom é programado para protocolos sem conexão, você pode usar um protocolo orientado a conexões também. Se você escolher para fazer isso, primeiro você deve estabelecer uma conexão host remoto chamando o método Connect ou aceitar uma conexão de entrada host remoto chamando o método Accept . Se você não estabelece ou não aceita uma conexão antes de chamar o método de ReceiveFrom , você terá SocketException. Você também pode estabelecer um host remoto padrão para um protocolo sem conexão antes de chamar o método de ReceiveFrom . Nesses casos, o método de ReceiveFrom irá ignorar o parâmetro de remoteEP e receberá apenas dados host remoto conectado ou padrão.

Com soquetes orientados a conexões, o ReceiveFrom ler tantos quanto dados está disponível até o tamanho de buffer. Se o host remoto encerra a conexão de Socket com o método de Shutdown , e todos os dados disponíveis são recebidos, o método de ReceiveFrom concluirá imediatamente e retornará os bytes zero.

ObservaçãoObservação

Se você receber SocketException, use a propriedade de SocketException.ErrorCode para obter o código de erro específico. Depois que você tiver obtido esse código, consulte a documentação do código de erro da API de versão 2 de soquetes do Windows na biblioteca MSDN para obter uma descrição mais detalhada de erro.

ObservaçãoObservação

AddressFamily de EndPoint usado em necessidades de ReceiveFrom para coincidir com AddressFamily de EndPoint usado em SendTo.

ObservaçãoObservação

A saída desse membro mostra as informações quando você ativa o rastreamento de rede em seu aplicativo. Para obter mais informações, consulte Rastreamento de rede.

O exemplo de código recebe uma datagrama sem conexão de um host remoto. SocketFlags é passado para o método de ReceiveFrom .


public static void ReceiveFrom2()
{
    IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName());
    IPEndPoint endPoint = new IPEndPoint(hostEntry.AddressList[0], 11000);

    Socket s = new Socket(endPoint.Address.AddressFamily,
        SocketType.Dgram,
        ProtocolType.Udp);

    // Creates an IpEndPoint to capture the identity of the sending host.
    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
    EndPoint senderRemote = (EndPoint)sender;

    // Binding is required with ReceiveFrom calls.
    s.Bind(endPoint);

    byte[] msg = new Byte[256];
    Console.WriteLine ("Waiting to receive datagrams from client...");
    // This call blocks. 
    s.ReceiveFrom(msg, SocketFlags.None, ref senderRemote);
    s.Close();
}


.NET Framework

Com suporte em: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos do sistema do .NET Framework.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2015 Microsoft