Comparteix a través de


Socket.ReceiveFrom Método

Definición

Recibe un datagrama y almacena el extremo de origen.

Sobrecargas

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

Recibe el número especificado de bytes en el búfer de datos mediante el marcador SocketFlags especificado y almacena el extremo.

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

Recibe el número especificado de bytes de datos en la ubicación especificada del búfer de datos, mediante el SocketFlags especificado y almacena el punto de conexión.

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

Recibe un datagrama en el búfer de datos usando el objeto SocketFlags especificado y almacena el extremo.

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Recibe un datagrama en el búfer de datos usando el objeto SocketFlags especificado y almacena el extremo.

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

Recibe un datagrama en el búfer de datos usando el objeto SocketFlags especificado y almacena el extremo.

ReceiveFrom(Span<Byte>, EndPoint)

Recibe un datagrama en el búfer de datos y almacena el extremo.

ReceiveFrom(Byte[], EndPoint)

Recibe un datagrama en el búfer de datos y almacena el extremo.

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

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Recibe el número especificado de bytes en el búfer de datos mediante el marcador SocketFlags especificado y almacena el extremo.

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

Matriz de tipo Byte que es la ubicación de almacenamiento para los datos recibidos.

size
Int32

Número de bytes que se va a recibir.

socketFlags
SocketFlags

Combinación bit a bit de los valores de SocketFlags.

remoteEP
EndPoint

Referencia a un EndPoint de tipo del mismo tipo que el punto de conexión del host remoto que se va a actualizar al recibirse correctamente.

Devoluciones

Número de bytes recibidos.

Excepciones

buffer es null.

O bien

remoteEP es null.

size es menor que 0.

O bien

size es mayor que la longitud de buffer.

socketFlags no es una combinación válida de valores.

o bien

La propiedad LocalEndPoint no se estableció.

o bien

Se produce un error de sistema operativo al acceder a Socket.

El Socket se ha cerrado.

Un llamador de la pila de llamadas no tiene los permisos necesarios.

Ejemplos

En el ejemplo de código siguiente se recibe un datagrama sin conexión de un host remoto. El tamaño del búfer y SocketFlags se pasan al ReceiveFrom método .

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

Comentarios

El ReceiveFrom método lee los datos en el buffer parámetro , devuelve el número de bytes leídos correctamente y captura el punto de conexión del host remoto desde el que se enviaron los datos. Este método es útil si tiene previsto recibir datagramas sin conexión de un host desconocido o de varios hosts.

Esta sobrecarga solo requiere que proporcione un búfer de recepción, el número de bytes que desea recibir, el elemento necesario SocketFlagsy un EndPoint que represente el host remoto. El desplazamiento del búfer tiene como valor predeterminado 0.

Con los protocolos sin conexión, ReceiveFrom leerá el primer datagrama en cola recibido en el búfer de red local. Si el datagrama que recibe es mayor que el tamaño de buffer, el ReceiveFrom método se rellenará buffer con la mayor cantidad posible del mensaje y generará un SocketException. Si usa un protocolo no confiable, se perderán los datos excesivos. Si usa un protocolo confiable, el proveedor de servicios conservará los datos excesivos y podrá recuperarlos llamando al ReceiveFrom método con un búfer lo suficientemente grande.

Si no hay datos disponibles para la lectura, el ReceiveFrom método se bloqueará hasta que los datos estén disponibles. Si está en modo de no bloqueo y no hay datos disponibles en el búfer de pila de protocolos, el ReceiveFrom método se completará inmediatamente y generará un SocketException. Puede usar la Available propiedad para determinar si los datos están disponibles para su lectura. Cuando Available no es cero, vuelva a intentar la operación de recepción.

Aunque ReceiveFrom está pensado para protocolos sin conexión, también puede usar un protocolo orientado a la conexión. Si decide hacerlo, primero debe establecer una conexión de host remota llamando al Connect método o aceptando una conexión de host remota entrante llamando al Accept método . Si no establece o acepta una conexión antes de llamar al ReceiveFrom método , obtendrá un SocketException. También puede establecer un host remoto predeterminado para un protocolo sin conexión antes de llamar al ReceiveFrom método .

Con los sockets orientados a la conexión, ReceiveFrom leerá tantos datos como estén disponibles hasta el número de bytes especificados por el size parámetro . Si el host remoto cierra la Socket conexión con el Shutdown método y se han recibido todos los datos disponibles, el ReceiveFrom método se completará inmediatamente y devolverá cero bytes.

Nota

Antes de llamar a ReceiveFrom, debe enlazar explícitamente a Socket un punto de conexión local mediante el Bind método . Si no lo hace, ReceiveFrom iniciará una SocketExceptionexcepción . Si recibe un SocketException, use la SocketException.ErrorCode propiedad para obtener el código de error específico. Después de obtener este código, consulte la documentación del código de error de la API de Windows Sockets versión 2 para obtener una descripción detallada del error.

Nota

El AddressFamily de utilizado EndPoint en ReceiveFrom debe coincidir con el AddressFamily de utilizado EndPoint en SendTo.

Nota

Este miembro genera información de seguimiento cuando se habilita el seguimiento de red en la aplicación. Para obtener más información, consulte Seguimiento de red en .NET Framework.

Consulte también

Se aplica a

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

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Recibe el número especificado de bytes de datos en la ubicación especificada del búfer de datos, mediante el SocketFlags especificado y almacena el punto de conexión.

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

Matriz de tipo Byte que es la ubicación de almacenamiento para los datos recibidos.

offset
Int32

Posición en el parámetro buffer para almacenar los datos recibidos.

size
Int32

Número de bytes que se va a recibir.

socketFlags
SocketFlags

Combinación bit a bit de los valores de SocketFlags.

remoteEP
EndPoint

Referencia a un EndPoint de tipo del mismo tipo que el punto de conexión del host remoto que se va a actualizar al recibirse correctamente.

Devoluciones

Número de bytes recibidos.

Excepciones

buffer es null.

O bien

remoteEP es null.

offset es menor que 0.

O bien

offset es mayor que la longitud de buffer.

O bien

size es menor que 0.

o bien

size es mayor que la longitud de buffer menos el valor del parámetro de desplazamiento.

socketFlags no es una combinación válida de valores.

o bien

La propiedad LocalEndPoint no se estableció.

o bien

Error al intentar acceder al socket.

El Socket se ha cerrado.

Ejemplos

En el ejemplo de código siguiente se recibe un datagrama sin conexión de un host remoto. El desplazamiento, el tamaño del búfer y SocketFlags se pasan al ReceiveFrom método .

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

Comentarios

El ReceiveFrom método lee los datos en el buffer parámetro , devuelve el número de bytes leídos correctamente y captura el punto de conexión del host remoto desde el que se enviaron los datos. Este método es útil si tiene previsto recibir datagramas sin conexión de un host desconocido o de varios hosts.

Con los protocolos sin conexión, ReceiveFrom leerá el primer datagrama en cola recibido en el búfer de red local. Si el datagrama que recibe es mayor que el tamaño de buffer, el ReceiveFrom método se rellenará buffer con la mayor cantidad posible del mensaje y generará un SocketException. Si usa un protocolo no confiable, se perderán los datos excesivos. Si usa un protocolo confiable, el proveedor de servicios conservará los datos excesivos y podrá recuperarlos llamando al ReceiveFrom método con un búfer lo suficientemente grande.

Si no hay datos disponibles para la lectura, el ReceiveFrom método se bloqueará hasta que los datos estén disponibles. Si está en modo de no bloqueo y no hay datos disponibles en el búfer de pila de protocolos, el ReceiveFrom método se completará inmediatamente y generará un SocketException. Puede usar la Available propiedad para determinar si los datos están disponibles para su lectura. Cuando Available no es cero, vuelva a intentar la operación de recepción.

Aunque ReceiveFrom está pensado para protocolos sin conexión, también puede usar un protocolo orientado a la conexión. Si decide hacerlo, primero debe establecer una conexión de host remota llamando al Connect método o aceptando una conexión de host remota entrante llamando al Accept método . Si no establece o acepta una conexión antes de llamar al ReceiveFrom método , obtendrá un SocketException. También puede establecer un host remoto predeterminado para un protocolo sin conexión antes de llamar al ReceiveFrom método .

Con los sockets orientados a la conexión, ReceiveFrom leerá tantos datos como estén disponibles hasta la cantidad de bytes especificados por el size parámetro . Si el host remoto cierra la Socket conexión con el Shutdown método y se han recibido todos los datos disponibles, el ReceiveFrom método se completará inmediatamente y devolverá cero bytes.

Nota

Antes de llamar a ReceiveFrom, debe enlazar explícitamente a Socket un punto de conexión local mediante el Bind método . Si no lo hace, ReceiveFrom iniciará una SocketExceptionexcepción . Si recibe un SocketException, use la SocketException.ErrorCode propiedad para obtener el código de error específico. Después de obtener este código, consulte la documentación del código de error de la API de Windows Sockets versión 2 para obtener una descripción detallada del error.

Nota

El AddressFamily de utilizado EndPoint en ReceiveFrom debe coincidir con el AddressFamily de utilizado EndPoint en SendTo.

Nota

Este miembro genera información de seguimiento cuando se habilita el seguimiento de red en la aplicación. Para obtener más información, consulte Seguimiento de red en .NET Framework.

Consulte también

Se aplica a

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Recibe un datagrama en el búfer de datos usando el objeto SocketFlags especificado y almacena el extremo.

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

Parámetros

buffer
Span<Byte>

Intervalo de bytes que es la ubicación de almacenamiento de los datos recibidos.

socketFlags
SocketFlags

Combinación bit a bit de los valores de SocketFlags.

remoteEP
EndPoint

Referencia a un EndPoint de tipo del mismo tipo que el punto de conexión del host remoto que se va a actualizar al recibirse correctamente.

Devoluciones

Número de bytes recibidos.

Excepciones

remoteEP es null.

Error al intentar acceder al socket.

El Socket se ha cerrado.

Se aplica a

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Recibe un datagrama en el búfer de datos usando el objeto SocketFlags especificado y almacena el extremo.

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

Matriz de tipo Byte que constituye la ubicación de almacenamiento de los datos recibidos.

socketFlags
SocketFlags

Combinación bit a bit de los valores de SocketFlags.

remoteEP
EndPoint

Referencia a un EndPoint de tipo del mismo tipo que el punto de conexión del host remoto que se va a actualizar al recibirse correctamente.

Devoluciones

Número de bytes recibidos.

Excepciones

buffer es null.

O bien

remoteEP es null.

Error al intentar acceder al socket.

El Socket se ha cerrado.

Un llamador de la pila de llamadas no tiene los permisos necesarios.

Ejemplos

En el ejemplo de código siguiente se recibe un datagrama sin conexión de un host remoto. SocketFlags se pasan al ReceiveFrom método .

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

Comentarios

El ReceiveFrom método lee los datos en el buffer parámetro , devuelve el número de bytes leídos correctamente y captura el punto de conexión del host remoto desde el que se enviaron los datos. Este método es útil si tiene previsto recibir datagramas sin conexión de un host desconocido o de varios hosts.

Esta sobrecarga solo requiere que proporcione un búfer de recepción, el elemento necesario SocketFlagsy un EndPoint que represente el host remoto. El valor predeterminado de desplazamiento es 0 y el tamaño predeterminado es la longitud del parámetro de búfer.

Nota

Antes de llamar a ReceiveFrom, debe enlazar explícitamente a Socket un punto de conexión local mediante el Bind método . Si no lo hace, ReceiveFrom iniciará una SocketExceptionexcepción .

Con los protocolos sin conexión, ReceiveFrom leerá el primer datagrama en cola recibido en el búfer de red local. Si el datagrama que recibe es mayor que el tamaño de buffer, el ReceiveFrom método se rellenará buffer con la mayor cantidad posible del mensaje y generará un SocketException. Si usa un protocolo no confiable, se perderán los datos excesivos. Si usa un protocolo confiable, el proveedor de servicios conservará los datos excesivos y podrá recuperarlos llamando al ReceiveFrom método con un búfer lo suficientemente grande.

Si no hay datos disponibles para la lectura, el ReceiveFrom método se bloqueará hasta que los datos estén disponibles. Si está en modo de no bloqueo y no hay datos disponibles en el búfer de pila de protocolos, el ReceiveFrom método se completará inmediatamente y generará un SocketException. Puede usar la Available propiedad para determinar si los datos están disponibles para su lectura. Cuando Available no es cero, vuelva a intentar la operación de recepción.

Aunque ReceiveFrom está pensado para protocolos sin conexión, también puede usar un protocolo orientado a la conexión. Si decide hacerlo, primero debe establecer una conexión de host remota llamando al Connect método o aceptando una conexión de host remota entrante llamando al Accept método . Si no establece o acepta una conexión antes de llamar al ReceiveFrom método , obtendrá un SocketException. También puede establecer un host remoto predeterminado para un protocolo sin conexión antes de llamar al ReceiveFrom método .

Con los sockets orientados a la conexión, ReceiveFrom leerá tantos datos como estén disponibles hasta el tamaño de buffer. Si el host remoto cierra la Socket conexión con el Shutdown método y se han recibido todos los datos disponibles, el ReceiveFrom método se completará inmediatamente y devolverá cero bytes.

Nota

Si recibe un SocketException, use la SocketException.ErrorCode propiedad para obtener el código de error específico. Después de obtener este código, consulte la documentación del código de error de la API de Windows Sockets versión 2 para obtener una descripción detallada del error.

Nota

El AddressFamily de utilizado EndPoint en ReceiveFrom debe coincidir con el AddressFamily de utilizado EndPoint en SendTo.

Nota

Este miembro genera información de seguimiento cuando se habilita el seguimiento de red en la aplicación. Para obtener más información, consulte Seguimiento de red en .NET Framework.

Consulte también

Se aplica a

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

Source:
Socket.cs
Source:
Socket.cs

Recibe un datagrama en el búfer de datos usando el objeto SocketFlags especificado y almacena el extremo.

public:
 int ReceiveFrom(Span<System::Byte> buffer, System::Net::Sockets::SocketFlags socketFlags, System::Net::SocketAddress ^ receivedAddress);
public int ReceiveFrom (Span<byte> buffer, System.Net.Sockets.SocketFlags socketFlags, System.Net.SocketAddress receivedAddress);
member this.ReceiveFrom : Span<byte> * System.Net.Sockets.SocketFlags * System.Net.SocketAddress -> int
Public Function ReceiveFrom (buffer As Span(Of Byte), socketFlags As SocketFlags, receivedAddress As SocketAddress) As Integer

Parámetros

buffer
Span<Byte>

Intervalo de bytes que es la ubicación de almacenamiento de los datos recibidos.

socketFlags
SocketFlags

Combinación bit a bit de los valores de SocketFlags.

receivedAddress
SocketAddress

Instancia SocketAddress que se actualiza con el valor del mismo nivel remoto cuando este método devuelve.

Devoluciones

Número de bytes recibidos.

Excepciones

receivedAddress es null.

Error al intentar acceder al socket.

El Socket se ha cerrado.

Se aplica a

ReceiveFrom(Span<Byte>, EndPoint)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Recibe un datagrama en el búfer de datos y almacena el extremo.

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

Parámetros

buffer
Span<Byte>

Intervalo de bytes que es la ubicación de almacenamiento de los datos recibidos.

remoteEP
EndPoint

Referencia a un EndPoint de tipo del mismo tipo que el punto de conexión del host remoto que se va a actualizar al recibirse correctamente.

Devoluciones

Número de bytes recibidos.

Excepciones

remoteEP es null.

Error al intentar acceder al socket.

El Socket se ha cerrado.

Se aplica a

ReceiveFrom(Byte[], EndPoint)

Source:
Socket.cs
Source:
Socket.cs
Source:
Socket.cs

Recibe un datagrama en el búfer de datos y almacena el extremo.

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

Matriz de tipo Byte que es la ubicación de almacenamiento para los datos recibidos.

remoteEP
EndPoint

Referencia a un EndPoint de tipo del mismo tipo que el punto de conexión del host remoto que se va a actualizar al recibirse correctamente.

Devoluciones

Número de bytes recibidos.

Excepciones

buffer es null.

O bien

remoteEP es null.

Error al intentar acceder al socket.

El Socket se ha cerrado.

Un llamador de la pila de llamadas no tiene los permisos necesarios.

Ejemplos

En el ejemplo de código siguiente se recibe un datagrama sin conexión de un host remoto.

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

Comentarios

El ReceiveFrom método lee los datos en el buffer parámetro , devuelve el número de bytes leídos correctamente y captura el punto de conexión del host remoto desde el que se enviaron los datos. Este método es útil si tiene previsto recibir datagramas sin conexión de un host desconocido o de varios hosts.

Esta sobrecarga solo requiere que proporcione una recepción buffery que EndPoint represente el host remoto. El desplazamiento del búfer tiene como valor predeterminado 0. El tamaño predeterminado es la longitud del buffer parámetro y el socketFlags valor predeterminado es None.

Nota

Antes de llamar a ReceiveFrom, debe enlazar explícitamente a Socket un punto de conexión local mediante el Bind método . Si no lo hace, ReceiveFrom iniciará una SocketExceptionexcepción .

Con los protocolos sin conexión, ReceiveFrom leerá el primer datagrama en cola recibido en el búfer de red local. Si el datagrama que recibe es mayor que el tamaño de buffer, el ReceiveFrom método se rellenará buffer con la mayor cantidad posible del mensaje y generará un SocketException. Si usa un protocolo no confiable, se perderán los datos excesivos. Si usa un protocolo confiable, el proveedor de servicios conservará los datos excesivos y podrá recuperarlos llamando al ReceiveFrom método con un búfer lo suficientemente grande.

Si no hay datos disponibles para la lectura, el ReceiveFrom método se bloqueará hasta que los datos estén disponibles. Si está en modo de no bloqueo y no hay datos disponibles en el búfer de pila de protocolos, el ReceiveFrom método se completará inmediatamente y generará un SocketException. Puede usar la Available propiedad para determinar si los datos están disponibles para su lectura. Cuando Available no es cero, vuelva a intentar la operación de recepción.

Aunque ReceiveFrom está pensado para protocolos sin conexión, también puede usar un protocolo orientado a la conexión. Si decide hacerlo, primero debe establecer una conexión de host remota llamando al Connect método o aceptando una conexión de host remota entrante llamando al Accept método . Si no establece o acepta una conexión antes de llamar al ReceiveFrom método , obtendrá un SocketException. También puede establecer un host remoto predeterminado para un protocolo sin conexión antes de llamar al ReceiveFrom método .

Con los sockets orientados a la conexión, ReceiveFrom leerá tantos datos como estén disponibles hasta el tamaño de buffer. Si el host remoto cierra la Socket conexión con el Shutdown método y se han recibido todos los datos disponibles, el ReceiveFrom método se completará inmediatamente y devolverá cero bytes.

Nota

Si recibe un SocketException, use la SocketException.ErrorCode propiedad para obtener el código de error específico. Después de obtener este código, consulte la documentación del código de error de la API de Windows Sockets versión 2 para obtener una descripción detallada del error.

Nota

El AddressFamily de utilizado EndPoint en ReceiveFrom debe coincidir con el AddressFamily de utilizado EndPoint en SendTo.

Nota

Este miembro genera información de seguimiento cuando se habilita el seguimiento de red en la aplicación. Para obtener más información, consulte Seguimiento de red en .NET Framework.

Consulte también

Se aplica a