Socket.ReceiveFrom Método

Definição

Recebe um datagrama e armazena o ponto de extremidade de origem.Receives a datagram and stores the source endpoint.

Sobrecargas

ReceiveFrom(Byte[], EndPoint)

Recebe um datagrama no buffer de dados e armazena o ponto de extremidade.Receives a datagram into the data buffer and stores the endpoint.

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Recebe um datagrama no buffer de dados, usando o SocketFlags especificado e armazena o ponto de extremidade.Receives a datagram into the data buffer, using the specified SocketFlags, and stores the endpoint.

ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)

Recebe o número especificado de bytes no buffer de dados usando o SocketFlags especificado e armazena o ponto de extremidade.Receives the specified number of bytes into the data buffer, using the specified SocketFlags, and stores the endpoint.

ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)

Recebe o número de bytes de dados no local especificado no buffer de dados usando o SocketFlags especificado e armazena o ponto de extremidade.Receives the specified number of bytes of data into the specified location of the data buffer, using the specified SocketFlags, and stores the endpoint.

ReceiveFrom(Byte[], EndPoint)

Recebe um datagrama no buffer de dados e armazena o ponto de extremidade.Receives a datagram into the data buffer and stores the endpoint.

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), ByRef remoteEP As EndPoint) As Integer

Parâmetros

buffer
Byte[]

Uma matriz do tipo Byte que é o local de armazenamento dos dados recebidos.An array of type Byte that is the storage location for received data.

remoteEP
EndPoint

Um EndPoint, passado por referência, que representa o servidor remoto.An EndPoint, passed by reference, that represents the remote server.

Retornos

Int32

O número de bytes recebidos.The number of bytes received.

Exceções

buffer é null.buffer is null.

- ou --or- remoteEP é null.remoteEP is null.

Ocorreu um erro ao tentar acessar o soquete.An error occurred when attempting to access the socket.

O Socket foi fechado.The Socket has been closed.

Um chamador na pilha de chamadas não tem as permissões necessárias.A caller in the call stack does not have the required permissions.

Exemplos

O exemplo de código a seguir recebe um datagrama sem conexão de um host remoto.The following code example receives a connectionless datagram from a remote host.

static void ReceiveFrom1()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IPEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine( "Waiting to receive datagrams from client..." );
   
   // This call blocks. 
   s->ReceiveFrom( msg, senderRemote );
   s->Close();
}
public static void ReceiveFrom1()
{
    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, ref senderRemote);
    s.Close();
}
Public Shared Sub ReceiveFrom1() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IPEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any, 0)
    Dim senderRemote As EndPoint = CType(sender, EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    
    Dim msg() As Byte = New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    
    ' This call blocks. 
    s.ReceiveFrom(msg, senderRemote)
    s.Close()

End Sub

Comentários

O ReceiveFrom método lê dados no buffer parâmetro, retorna o número de bytes lidos com êxito e captura o ponto de extremidade do host remoto do qual os dados foram enviados.The ReceiveFrom method reads data into the buffer parameter, returns the number of bytes successfully read, and captures the remote host endpoint from which the data was sent. Esse método é útil se você pretende receber datagramas sem conexão de um host desconhecido ou vários hosts.This method is useful if you intend to receive connectionless datagrams from an unknown host or multiple hosts.

Essa sobrecarga requer apenas que você forneça um Receive buffer e um EndPoint que represente o host remoto.This overload only requires you to provide a receive buffer, and an EndPoint that represents the remote host. O deslocamento do buffer padrão é 0.The buffer offset defaults to 0. O tamanho padrão é o comprimento do buffer parâmetro e o socketFlags valor padrão é None .The size defaults to the length of the buffer parameter and the socketFlags value defaults to None.

Observação

Antes ReceiveFrom de chamar, você deve associar explicitamente o Socket a um ponto de extremidade local usando o Bind método.Before calling ReceiveFrom, you must explicitly bind the Socket to a local endpoint using the Bind method. Se você não fizer isso, o gerará ReceiveFrom um SocketException .If you do not, ReceiveFrom will throw a SocketException.

Com protocolos sem conexão, ReceiveFrom o lerá o primeiro datagrama enfileirado recebido no buffer de rede local.With connectionless protocols, ReceiveFrom will read the first enqueued datagram received into the local network buffer. Se o datagrama recebido for maior que o tamanho buffer , o ReceiveFrom método preencherá o buffer máximo possível da mensagem, e lançará um SocketException .If the datagram you receive is larger than the size of buffer, the ReceiveFrom method will fill buffer with as much of the message as is possible, and throw a SocketException. Se você estiver usando um protocolo não confiável, os dados em excesso serão perdidos.If you are using an unreliable protocol, the excess data will be lost. Se você estiver usando um protocolo confiável, os dados em excesso serão mantidos pelo provedor de serviços e você poderá recuperá-los chamando o ReceiveFrom método com um buffer grande o suficiente.If you are using a reliable protocol, the excess data will be retained by the service provider and you can retrieve it by calling the ReceiveFrom method with a large enough buffer.

Se nenhum dado estiver disponível para leitura, o ReceiveFrom método será bloqueado até que os dados estejam disponíveis.If no data is available for reading, the ReceiveFrom method will block until data is available. Se você estiver no modo sem bloqueio e não houver dados disponíveis no buffer da pilha de protocolos, o ReceiveFrom método será concluído imediatamente e lançará um SocketException .If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the ReceiveFrom method will complete immediately and throw a SocketException. Você pode usar a Available propriedade para determinar se os dados estão disponíveis para leitura.You can use the Available property to determine if data is available for reading. Quando Available for diferente de zero, repita a operação de recebimento.When Available is non-zero, retry the receive operation.

Embora ReceiveFrom o seja destinado a protocolos sem conexão, você também pode usar um protocolo orientado por conexão.Although ReceiveFrom is intended for connectionless protocols, you can use a connection-oriented protocol as well. Se você optar por fazer isso, deverá primeiro estabelecer uma conexão de host remoto chamando o Connect método ou aceitar uma conexão de host remoto de entrada chamando o Accept método.If you choose to do so, you must first either establish a remote host connection by calling the Connect method or accept an incoming remote host connection by calling the Accept method. Se você não estabelecer ou aceitar uma conexão antes de chamar o ReceiveFrom método, receberá um SocketException .If you do not establish or accept a connection before calling the ReceiveFrom method, you will get a SocketException. Você também pode estabelecer um host remoto padrão para um protocolo sem conexão antes de chamar o ReceiveFrom método.You can also establish a default remote host for a connectionless protocol prior to calling the ReceiveFrom method. Em qualquer um desses casos, o ReceiveFrom método irá ignorar o remoteEP parâmetro e receber apenas dados do host remoto conectado ou padrão.In either of these cases, the ReceiveFrom method will ignore the remoteEP parameter and only receive data from the connected or default remote host.

Com soquetes orientados a conexão, ReceiveFrom o lerá a quantidade de dados que está disponível até o tamanho de buffer .With connection-oriented sockets, ReceiveFrom will read as much data as is available up to the size of buffer. Se o host remoto desligar a Socket conexão com o Shutdown método e todos os dados disponíveis tiverem sido recebidos, o ReceiveFrom método será concluído imediatamente e retornará zero bytes.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the ReceiveFrom method will complete immediately and return zero bytes.

Observação

Se você receber um SocketException , use a SocketException.ErrorCode propriedade para obter o código de erro específico.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. 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.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Observação

O AddressFamily do EndPoint usado no ReceiveFrom precisa corresponder ao AddressFamily do EndPoint usado em SendTo .The AddressFamily of the EndPoint used in ReceiveFrom needs to match the AddressFamily of the EndPoint used in SendTo.

Observação

Esse membro emite o rastreamento de informações quando você ativa o rastreamento de rede em seu aplicativo.This member outputs trace information when you enable network tracing in your application. Para obter mais informações, consulte rastreamento de rede na .NET Framework.For more information, see Network Tracing in the .NET Framework.

Confira também

Aplica-se a

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Recebe um datagrama no buffer de dados, usando o SocketFlags especificado e armazena o ponto de extremidade.Receives a datagram into the data buffer, using the specified SocketFlags, and stores the endpoint.

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer

Parâmetros

buffer
Byte[]

Uma matriz do tipo Byte que é o local de armazenamento dos dados recebidos.An array of type Byte that is the storage location for the received data.

socketFlags
SocketFlags

Uma combinação bit a bit dos valores SocketFlags.A bitwise combination of the SocketFlags values.

remoteEP
EndPoint

Um EndPoint, passado por referência, que representa o servidor remoto.An EndPoint, passed by reference, that represents the remote server.

Retornos

Int32

O número de bytes recebidos.The number of bytes received.

Exceções

buffer é null.buffer is null.

- ou --or- remoteEP é null.remoteEP is null.

Ocorreu um erro ao tentar acessar o soquete.An error occurred when attempting to access the socket.

O Socket foi fechado.The Socket has been closed.

Um chamador na pilha de chamadas não tem as permissões necessárias.A caller in the call stack does not have the required permissions.

Exemplos

O exemplo de código a seguir recebe um datagrama sem conexão de um host remoto.The following code example receives a connectionless datagram from a remote host. SocketFlags são passados para o ReceiveFrom método.SocketFlags are passed to the ReceiveFrom method.

static void ReceiveFrom2()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IpEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine( "Waiting to receive datagrams from client..." );
   // This call blocks. 
   s->ReceiveFrom( msg, SocketFlags::None, senderRemote );
   s->Close();
}
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();
}
Public Shared Sub ReceiveFrom2() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IpEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any, 0)
    Dim senderRemote As EndPoint = CType(sender, EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    
    Dim msg() As Byte = New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    ' This call blocks. 
    s.ReceiveFrom(msg, SocketFlags.None, senderRemote)
    s.Close()

End Sub

Comentários

O ReceiveFrom método lê dados no buffer parâmetro, retorna o número de bytes lidos com êxito e captura o ponto de extremidade do host remoto do qual os dados foram enviados.The ReceiveFrom method reads data into the buffer parameter, returns the number of bytes successfully read, and captures the remote host endpoint from which the data was sent. Esse método é útil se você pretende receber datagramas sem conexão de um host desconhecido ou vários hosts.This method is useful if you intend to receive connectionless datagrams from an unknown host or multiple hosts.

Essa sobrecarga requer apenas que você forneça um buffer de recebimento, o necessário SocketFlags e um EndPoint que represente o host remoto.This overload only requires you to provide a receive buffer, the necessary SocketFlags, and an EndPoint that represents the remote host. O deslocamento padrão é 0 e o tamanho padrão é o comprimento do parâmetro de buffer.The offset defaults to 0 and the size defaults to the length of the buffer parameter.

Observação

Antes ReceiveFrom de chamar, você deve associar explicitamente o Socket a um ponto de extremidade local usando o Bind método.Before calling ReceiveFrom, you must explicitly bind the Socket to a local endpoint using the Bind method. Se você não fizer isso, o gerará ReceiveFrom um SocketException .If you do not, ReceiveFrom will throw a SocketException.

Com protocolos sem conexão, ReceiveFrom o lerá o primeiro datagrama enfileirado recebido no buffer de rede local.With connectionless protocols, ReceiveFrom will read the first enqueued datagram received into the local network buffer. Se o datagrama recebido for maior que o tamanho buffer , o ReceiveFrom método preencherá o buffer máximo possível da mensagem, e lançará um SocketException .If the datagram you receive is larger than the size of buffer, the ReceiveFrom method will fill buffer with as much of the message as is possible, and throw a SocketException. Se você estiver usando um protocolo não confiável, os dados em excesso serão perdidos.If you are using an unreliable protocol, the excess data will be lost. Se você estiver usando um protocolo confiável, os dados em excesso serão mantidos pelo provedor de serviços e você poderá recuperá-los chamando o ReceiveFrom método com um buffer grande o suficiente.If you are using a reliable protocol, the excess data will be retained by the service provider and you can retrieve it by calling the ReceiveFrom method with a large enough buffer.

Se nenhum dado estiver disponível para leitura, o ReceiveFrom método será bloqueado até que os dados estejam disponíveis.If no data is available for reading, the ReceiveFrom method will block until data is available. Se você estiver no modo sem bloqueio e não houver dados disponíveis no buffer da pilha de protocolos, o ReceiveFrom método será concluído imediatamente e lançará um SocketException .If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the ReceiveFrom method will complete immediately and throw a SocketException. Você pode usar a Available propriedade para determinar se os dados estão disponíveis para leitura.You can use the Available property to determine if data is available for reading. Quando Available for diferente de zero, repita a operação de recebimento.When Available is non-zero, retry the receive operation.

Embora ReceiveFrom o seja destinado a protocolos sem conexão, você também pode usar um protocolo orientado por conexão.Although ReceiveFrom is intended for connectionless protocols, you can use a connection-oriented protocol as well. Se você optar por fazer isso, deverá primeiro estabelecer uma conexão de host remoto chamando o Connect método ou aceitar uma conexão de host remoto de entrada chamando o Accept método.If you choose to do so, you must first either establish a remote host connection by calling the Connect method or accept an incoming remote host connection by calling the Accept method. Se você não estabelecer ou aceitar uma conexão antes de chamar o ReceiveFrom método, receberá um SocketException .If you do not establish or accept a connection before calling the ReceiveFrom method, you will get a SocketException. Você também pode estabelecer um host remoto padrão para um protocolo sem conexão antes de chamar o ReceiveFrom método.You can also establish a default remote host for a connectionless protocol prior to calling the ReceiveFrom method. Em qualquer um desses casos, o ReceiveFrom método irá ignorar o remoteEP parâmetro e receber apenas dados do host remoto conectado ou padrão.In either of these cases, the ReceiveFrom method will ignore the remoteEP parameter and only receive data from the connected or default remote host.

Com soquetes orientados a conexão, ReceiveFrom o lerá a quantidade de dados que está disponível até o tamanho de buffer .With connection-oriented sockets, ReceiveFrom will read as much data as is available up to the size of buffer. Se o host remoto desligar a Socket conexão com o Shutdown método e todos os dados disponíveis tiverem sido recebidos, o ReceiveFrom método será concluído imediatamente e retornará zero bytes.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been Received, the ReceiveFrom method will complete immediately and return zero bytes.

Observação

Se você receber um SocketException , use a SocketException.ErrorCode propriedade para obter o código de erro específico.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. 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.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Observação

O AddressFamily do EndPoint usado no ReceiveFrom precisa corresponder ao AddressFamily do EndPoint usado em SendTo .The AddressFamily of the EndPoint used in ReceiveFrom needs to match the AddressFamily of the EndPoint used in SendTo.

Observação

Esse membro emite o rastreamento de informações quando você ativa o rastreamento de rede em seu aplicativo.This member outputs trace information when you enable network tracing in your application. Para obter mais informações, consulte rastreamento de rede na .NET Framework.For more information, see Network Tracing in the .NET Framework.

Confira também

Aplica-se a

ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)

Recebe o número especificado de bytes no buffer de dados usando o SocketFlags especificado e armazena o ponto de extremidade.Receives the specified number of bytes into the data buffer, using the specified SocketFlags, and stores the endpoint.

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * int * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer

Parâmetros

buffer
Byte[]

Uma matriz do tipo Byte que é o local de armazenamento dos dados recebidos.An array of type Byte that is the storage location for received data.

size
Int32

O número de bytes a serem recebidos.The number of bytes to receive.

socketFlags
SocketFlags

Uma combinação bit a bit dos valores SocketFlags.A bitwise combination of the SocketFlags values.

remoteEP
EndPoint

Um EndPoint, passado por referência, que representa o servidor remoto.An EndPoint, passed by reference, that represents the remote server.

Retornos

Int32

O número de bytes recebidos.The number of bytes received.

Exceções

buffer é null.buffer is null.

- ou --or- remoteEP é null.remoteEP is null.

size é menor que 0.size is less than 0.

- ou --or- size é maior que o comprimento do buffer.size is greater than the length of buffer.

socketFlags não é uma combinação válida de valores.socketFlags is not a valid combination of values.

- ou --or- A propriedade LocalEndPoint não foi definida.The LocalEndPoint property was not set.

- ou --or- Ocorre um erro de sistema operacional ao acessar o Socket.An operating system error occurs while accessing the Socket.

O Socket foi fechado.The Socket has been closed.

Um chamador na pilha de chamadas não tem as permissões necessárias.A caller in the call stack does not have the required permissions.

Exemplos

O exemplo de código a seguir recebe um datagrama sem conexão de um host remoto.The following code example receives a connectionless datagram from a remote host. O tamanho do buffer e SocketFlags são passados para o ReceiveFrom método.The buffer size, and SocketFlags are passed to the ReceiveFrom method.

static void ReceiveFrom3()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IPEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine(  "SWaiting to receive datagrams from client..." );
   // This call blocks. 
   s->ReceiveFrom( msg, msg->Length, SocketFlags::None, senderRemote );
   s->Close();
}
public static void ReceiveFrom3()
{
    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, msg.Length, SocketFlags.None, ref senderRemote);
    s.Close();
}
Public Shared Sub ReceiveFrom3() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IPEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any, 0)
    Dim senderRemote As EndPoint = CType(sender, EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    
    Dim msg() As Byte = New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    ' This call blocks. 
    s.ReceiveFrom(msg, msg.Length, SocketFlags.None, senderRemote)
    s.Close()

End Sub

Comentários

O ReceiveFrom método lê dados no buffer parâmetro, retorna o número de bytes lidos com êxito e captura o ponto de extremidade do host remoto do qual os dados foram enviados.The ReceiveFrom method reads data into the buffer parameter, returns the number of bytes successfully read, and captures the remote host endpoint from which the data was sent. Esse método é útil se você pretende receber datagramas sem conexão de um host desconhecido ou vários hosts.This method is useful if you intend to receive connectionless datagrams from an unknown host or multiple hosts.

Essa sobrecarga requer apenas que você forneça um buffer de recebimento, o número de bytes que você deseja receber, o necessário SocketFlags e um EndPoint que represente o host remoto.This overload only requires you to provide a receive buffer, the number of bytes you want to receive, the necessary SocketFlags, and an EndPoint that represents the remote host. O deslocamento do buffer padrão é 0.The buffer offset defaults to 0.

Com protocolos sem conexão, ReceiveFrom o lerá o primeiro datagrama enfileirado recebido no buffer de rede local.With connectionless protocols, ReceiveFrom will read the first enqueued datagram received into the local network buffer. Se o datagrama recebido for maior que o tamanho buffer , o ReceiveFrom método preencherá o buffer máximo possível da mensagem, e lançará um SocketException .If the datagram you receive is larger than the size of buffer, the ReceiveFrom method will fill buffer with as much of the message as is possible, and throw a SocketException. Se você estiver usando um protocolo não confiável, os dados em excesso serão perdidos.If you are using an unreliable protocol, the excess data will be lost. Se você estiver usando um protocolo confiável, os dados em excesso serão mantidos pelo provedor de serviços e você poderá recuperá-los chamando o ReceiveFrom método com um buffer grande o suficiente.If you are using a reliable protocol, the excess data will be retained by the service provider and you can retrieve it by calling the ReceiveFrom method with a large enough buffer.

Se nenhum dado estiver disponível para leitura, o ReceiveFrom método será bloqueado até que os dados estejam disponíveis.If no data is available for reading, the ReceiveFrom method will block until data is available. Se você estiver no modo sem bloqueio e não houver dados disponíveis no buffer da pilha de protocolos, o ReceiveFrom método será concluído imediatamente e lançará um SocketException .If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the ReceiveFrom method will complete immediately and throw a SocketException. Você pode usar a Available propriedade para determinar se os dados estão disponíveis para leitura.You can use the Available property to determine if data is available for reading. Quando Available for diferente de zero, repita a operação de recebimento.When Available is non-zero, retry the receive operation.

Embora ReceiveFrom o seja destinado a protocolos sem conexão, você também pode usar um protocolo orientado por conexão.Although ReceiveFrom is intended for connectionless protocols, you can use a connection-oriented protocol as well. Se você optar por fazer isso, deverá primeiro estabelecer uma conexão de host remoto chamando o Connect método ou aceitar uma conexão de host remoto de entrada chamando o Accept método.If you choose to do so, you must first either establish a remote host connection by calling the Connect method or accept an incoming remote host connection by calling the Accept method. Se você não estabelecer ou aceitar uma conexão antes de chamar o ReceiveFrom método, receberá um SocketException .If you do not establish or accept a connection before calling the ReceiveFrom method, you will get a SocketException. Você também pode estabelecer um host remoto padrão para um protocolo sem conexão antes de chamar o ReceiveFrom método.You can also establish a default remote host for a connectionless protocol prior to calling the ReceiveFrom method. Em qualquer um desses casos, o ReceiveFrom método irá ignorar o remoteEP parâmetro e receber apenas dados do host remoto conectado ou padrão.In either of these cases, the ReceiveFrom method will ignore the remoteEP parameter and only receive data from the connected or default remote host.

Com soquetes orientados a conexão, ReceiveFrom o lerá a quantidade de dados que está disponível até o número de bytes especificado pelo size parâmetro.With connection-oriented sockets, ReceiveFrom will read as much data as is available up to the number of bytes specified by the size parameter. Se o host remoto desligar a Socket conexão com o Shutdown método e todos os dados disponíveis tiverem sido recebidos, o ReceiveFrom método será concluído imediatamente e retornará zero bytes.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the ReceiveFrom method will complete immediately and return zero bytes.

Observação

Antes ReceiveFrom de chamar, você deve associar explicitamente o Socket a um ponto de extremidade local usando o Bind método.Before calling ReceiveFrom, you must explicitly bind the Socket to a local endpoint using the Bind method. Se você não fizer isso, o gerará ReceiveFrom um SocketException .If you do not, ReceiveFrom will throw a SocketException. Se você receber um SocketException , use a SocketException.ErrorCode propriedade para obter o código de erro específico.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. 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.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Observação

O AddressFamily do EndPoint usado no ReceiveFrom precisa corresponder ao AddressFamily do EndPoint usado em SendTo .The AddressFamily of the EndPoint used in ReceiveFrom needs to match the AddressFamily of the EndPoint used in SendTo.

Observação

Esse membro emite o rastreamento de informações quando você ativa o rastreamento de rede em seu aplicativo.This member outputs trace information when you enable network tracing in your application. Para obter mais informações, consulte rastreamento de rede na .NET Framework.For more information, see Network Tracing in the .NET Framework.

Confira também

Aplica-se a

ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)

Recebe o número de bytes de dados no local especificado no buffer de dados usando o SocketFlags especificado e armazena o ponto de extremidade.Receives the specified number of bytes of data into the specified location of the data buffer, using the specified SocketFlags, and stores the endpoint.

public:
 int ReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP);
public int ReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP);
member this.ReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint -> int
Public Function ReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint) As Integer

Parâmetros

buffer
Byte[]

Uma matriz do tipo Byte que é o local de armazenamento dos dados recebidos.An array of type Byte that is the storage location for received data.

offset
Int32

A posição no parâmetro buffer para armazenar os dados recebidos.The position in the buffer parameter to store the received data.

size
Int32

O número de bytes a serem recebidos.The number of bytes to receive.

socketFlags
SocketFlags

Uma combinação bit a bit dos valores SocketFlags.A bitwise combination of the SocketFlags values.

remoteEP
EndPoint

Um EndPoint, passado por referência, que representa o servidor remoto.An EndPoint, passed by reference, that represents the remote server.

Retornos

Int32

O número de bytes recebidos.The number of bytes received.

Exceções

buffer é null.buffer is null.

- ou --or- remoteEP é null.remoteEP is null.

offset é menor que 0.offset is less than 0.

- ou --or- offset é maior que o comprimento do buffer.offset is greater than the length of buffer.

- ou --or- size é menor que 0.size is less than 0.

- ou --or- size é maior que o comprimento de buffer menos o valor do parâmetro de deslocamento.size is greater than the length of the buffer minus the value of the offset parameter.

socketFlags não é uma combinação válida de valores.socketFlags is not a valid combination of values.

- ou --or- A propriedade LocalEndPoint não foi definida.The LocalEndPoint property was not set.

- ou --or- Ocorreu um erro ao tentar acessar o soquete.An error occurred when attempting to access the socket.

O Socket foi fechado.The Socket has been closed.

Exemplos

O exemplo de código a seguir recebe um datagrama sem conexão de um host remoto.The following code example receives a connectionless datagram from a remote host. O deslocamento, o tamanho do buffer e SocketFlags são passados para o ReceiveFrom método.The offset, buffer size, and SocketFlags are passed to the ReceiveFrom method.

static void ReceiveFrom4()
{
   IPHostEntry^ hostEntry = Dns::Resolve( Dns::GetHostName() );
   IPEndPoint^ endPoint = gcnew IPEndPoint( hostEntry->AddressList[ 0 ],11000 );

   Socket^ s = gcnew Socket( endPoint->Address->AddressFamily,
      SocketType::Dgram,
      ProtocolType::Udp );
   
   // Creates an IpEndPoint to capture the identity of the sending host.
   IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
   EndPoint^ senderRemote = safe_cast<EndPoint^>(sender);
   
   // Binding is required with ReceiveFrom calls.
   s->Bind( endPoint );

   array<Byte>^ msg = gcnew array<Byte>(256);
   Console::WriteLine(  "SWaiting to receive datagrams from client..." );
   // This call blocks.  
   s->ReceiveFrom( msg, 0, msg->Length, SocketFlags::None, senderRemote );
   s->Close();
}
public static void ReceiveFrom4()
{
    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, 0, msg.Length, SocketFlags.None, ref senderRemote);
    s.Close();
}
Public Shared Sub ReceiveFrom4() 
    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
    Dim endPoint As New IPEndPoint(hostEntry.AddressList(0), 11000)
    
    Dim s As New Socket(endPoint.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp)
    
    ' Creates an IpEndPoint to capture the identity of the sending host.
    Dim sender As New IPEndPoint(IPAddress.Any, 0)
    Dim senderRemote As EndPoint = CType(sender, EndPoint)
    
    ' Binding is required with ReceiveFrom calls.
    s.Bind(endPoint)
    Dim msg() As Byte = New [Byte](255) {}
    Console.WriteLine("Waiting to receive datagrams from client...")
    ' This call blocks.  
    s.ReceiveFrom(msg, 0, msg.Length, SocketFlags.None, senderRemote)
    s.Close()

End Sub

Comentários

O ReceiveFrom método lê dados no buffer parâmetro, retorna o número de bytes lidos com êxito e captura o ponto de extremidade do host remoto do qual os dados foram enviados.The ReceiveFrom method reads data into the buffer parameter, returns the number of bytes successfully read, and captures the remote host endpoint from which the data was sent. Esse método é útil se você pretende receber datagramas sem conexão de um host desconhecido ou vários hosts.This method is useful if you intend to receive connectionless datagrams from an unknown host or multiple hosts.

Com protocolos sem conexão, ReceiveFrom o lerá o primeiro datagrama enfileirado recebido no buffer de rede local.With connectionless protocols, ReceiveFrom will read the first enqueued datagram received into the local network buffer. Se o datagrama recebido for maior que o tamanho buffer , o ReceiveFrom método preencherá o buffer máximo possível da mensagem, e lançará um SocketException .If the datagram you receive is larger than the size of buffer, the ReceiveFrom method will fill buffer with as much of the message as is possible, and throw a SocketException. Se você estiver usando um protocolo não confiável, os dados em excesso serão perdidos.If you are using an unreliable protocol, the excess data will be lost. Se você estiver usando um protocolo confiável, os dados em excesso serão mantidos pelo provedor de serviços e você poderá recuperá-los chamando o ReceiveFrom método com um buffer grande o suficiente.If you are using a reliable protocol, the excess data will be retained by the service provider and you can retrieve it by calling the ReceiveFrom method with a large enough buffer.

Se nenhum dado estiver disponível para leitura, o ReceiveFrom método será bloqueado até que os dados estejam disponíveis.If no data is available for reading, the ReceiveFrom method will block until data is available. Se você estiver no modo sem bloqueio e não houver dados disponíveis no buffer da pilha de protocolos, o ReceiveFrom método será concluído imediatamente e lançará um SocketException .If you are in non-blocking mode, and there is no data available in the in the protocol stack buffer, the ReceiveFrom method will complete immediately and throw a SocketException. Você pode usar a Available propriedade para determinar se os dados estão disponíveis para leitura.You can use the Available property to determine if data is available for reading. Quando Available for diferente de zero, repita a operação de recebimento.When Available is non-zero, retry the receive operation.

Embora ReceiveFrom o seja destinado a protocolos sem conexão, você também pode usar um protocolo orientado por conexão.Although ReceiveFrom is intended for connectionless protocols, you can use a connection-oriented protocol as well. Se você optar por fazer isso, deverá primeiro estabelecer uma conexão de host remoto chamando o Connect método ou aceitar uma conexão de host remoto de entrada chamando o Accept método.If you choose to do so, you must first either establish a remote host connection by calling the Connect method or accept an incoming remote host connection by calling the Accept method. Se você não estabelecer ou aceitar uma conexão antes de chamar o ReceiveFrom método, receberá um SocketException .If you do not establish or accept a connection before calling the ReceiveFrom method, you will get a SocketException. Você também pode estabelecer um host remoto padrão para um protocolo sem conexão antes de chamar o ReceiveFrom método.You can also establish a default remote host for a connectionless protocol prior to calling the ReceiveFrom method. Em qualquer um desses casos, o ReceiveFrom método irá ignorar o remoteEP parâmetro e receber apenas dados do host remoto conectado ou padrão.In either of these cases, the ReceiveFrom method will ignore the remoteEP parameter and only receive data from the connected or default remote host.

Com soquetes orientados a conexão, ReceiveFrom o lerá a quantidade de dados que está disponível até a quantidade de bytes especificada pelo size parâmetro.With connection-oriented sockets, ReceiveFrom will read as much data as is available up to the amount of bytes specified by the size parameter. Se o host remoto desligar a Socket conexão com o Shutdown método e todos os dados disponíveis tiverem sido recebidos, o ReceiveFrom método será concluído imediatamente e retornará zero bytes.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been Received, the ReceiveFrom method will complete immediately and return zero bytes.

Observação

Antes ReceiveFrom de chamar, você deve associar explicitamente o Socket a um ponto de extremidade local usando o Bind método.Before calling ReceiveFrom, you must explicitly bind the Socket to a local endpoint using the Bind method. Se você não fizer isso, o gerará ReceiveFrom um SocketException .If you do not, ReceiveFrom will throw a SocketException. Se você receber um SocketException , use a SocketException.ErrorCode propriedade para obter o código de erro específico.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. 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.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Observação

O AddressFamily do EndPoint usado no ReceiveFrom precisa corresponder ao AddressFamily do EndPoint usado em SendTo .The AddressFamily of the EndPoint used in ReceiveFrom needs to match the AddressFamily of the EndPoint used in SendTo.

Observação

Esse membro emite o rastreamento de informações quando você ativa o rastreamento de rede em seu aplicativo.This member outputs trace information when you enable network tracing in your application. Para obter mais informações, consulte rastreamento de rede na .NET Framework.For more information, see Network Tracing in the .NET Framework.

Confira também

Aplica-se a