Compartir por


Socket.ReceiveFrom Método

Definición

Recibe un datagrama y almacena el punto de conexión de origen.

Sobrecargas

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

Recibe el número especificado de bytes en el búfer de datos, mediante el especificado SocketFlagsy almacena el punto de conexión.

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 especificado SocketFlagsy almacena el punto de conexión.

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

Recibe un datagrama en el búfer de datos, mediante el especificado SocketFlagsy almacena el punto de conexión.

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Recibe un datagrama en el búfer de datos, mediante el especificado SocketFlagsy almacena el punto de conexión.

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

Recibe un datagrama en el búfer de datos, mediante el especificado SocketFlagsy almacena el punto de conexión.

ReceiveFrom(Span<Byte>, EndPoint)

Recibe un datagrama en el búfer de datos y almacena el punto de conexión.

ReceiveFrom(Byte[], EndPoint)

Recibe un datagrama en el búfer de datos y almacena el punto de conexión.

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

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

Recibe el número especificado de bytes en el búfer de datos, mediante el especificado SocketFlagsy almacena el punto de conexión.

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 de los datos recibidos.

size
Int32

Número de bytes que se van a recibir.

socketFlags
SocketFlags

Combinación bit a bit de los SocketFlags valores.

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 recibir 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

No se estableció la LocalEndPoint propiedad .

O bien

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

Un autor de llamada 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 .

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 varios hosts.

Esta sobrecarga solo requiere que proporcione un búfer de recepción, el número de bytes que desea recibir, el 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 producirá una SocketExceptionexcepción . 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 la pila de protocolos, el ReceiveFrom método se completará inmediatamente y producirá 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 remoto llamando al Connect método o aceptando una conexión de host remoto entrante llamando al Accept método . Si no establece ni 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 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:

del AddressFamilyEndPoint objeto utilizado en ReceiveFrom debe coincidir con el AddressFamily de utilizado EndPoint en SendTo.

Nota:

Este miembro genera información de seguimiento al habilitar 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
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 especificado SocketFlagsy 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 de los datos recibidos.

offset
Int32

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

size
Int32

Número de bytes que se van a recibir.

socketFlags
SocketFlags

Combinación bit a bit de los SocketFlags valores.

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 recibir 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 del buffer menos el valor del parámetro offset.

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

O bien

No se estableció la LocalEndPoint propiedad .

O bien

Error al intentar acceder al socket.

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 .

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 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 producirá una SocketExceptionexcepción . 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 la pila de protocolos, el ReceiveFrom método se completará inmediatamente y producirá 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 remoto llamando al Connect método o aceptando una conexión de host remoto entrante llamando al Accept método . Si no establece ni 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 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:

del AddressFamilyEndPoint objeto utilizado en ReceiveFrom debe coincidir con el AddressFamily de utilizado EndPoint en SendTo.

Nota:

Este miembro genera información de seguimiento al habilitar 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
Source:
Socket.cs
Source:
Socket.cs

Recibe un datagrama en el búfer de datos, mediante el especificado SocketFlagsy almacena el punto de conexión.

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 SocketFlags valores.

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 recibir correctamente.

Devoluciones

Número de bytes recibidos.

Excepciones

remoteEP es null.

Error al intentar acceder al socket.

Se aplica a

ReceiveFrom(Byte[], SocketFlags, EndPoint)

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

Recibe un datagrama en el búfer de datos, mediante el especificado SocketFlagsy almacena el punto de conexión.

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 es la ubicación de almacenamiento de los datos recibidos.

socketFlags
SocketFlags

Combinación bit a bit de los SocketFlags valores.

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 recibir correctamente.

Devoluciones

Número de bytes recibidos.

Excepciones

buffer es null.

O bien

remoteEP es null.

Error al intentar acceder al socket.

Un autor de llamada 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 .

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 varios hosts.

Esta sobrecarga solo requiere que proporcione un búfer de recepción, el necesario SocketFlagsy un EndPoint que represente el host remoto. El desplazamiento tiene como valor predeterminado 0 y el tamaño tiene como valor predeterminado 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 producirá una SocketExceptionexcepción . 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 la pila de protocolos, el ReceiveFrom método se completará inmediatamente y producirá 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 remoto llamando al Connect método o aceptando una conexión de host remoto entrante llamando al Accept método . Si no establece ni 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 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:

del AddressFamilyEndPoint objeto utilizado en ReceiveFrom debe coincidir con el AddressFamily de utilizado EndPoint en SendTo.

Nota:

Este miembro genera información de seguimiento al habilitar 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
Source:
Socket.cs
Source:
Socket.cs

Recibe un datagrama en el búfer de datos, mediante el especificado SocketFlagsy almacena el punto de conexión.

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 SocketFlags valores.

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.

Se aplica a

ReceiveFrom(Span<Byte>, EndPoint)

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

Recibe un datagrama en el búfer de datos y almacena el punto de conexión.

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 recibir correctamente.

Devoluciones

Número de bytes recibidos.

Excepciones

remoteEP es null.

Error al intentar acceder al socket.

Se aplica a

ReceiveFrom(Byte[], EndPoint)

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

Recibe un datagrama en el búfer de datos y almacena el punto de conexión.

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 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 recibir correctamente.

Devoluciones

Número de bytes recibidos.

Excepciones

buffer es null.

O bien

remoteEP es null.

Error al intentar acceder al socket.

Un autor de llamada 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.

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 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 tiene como valor predeterminado 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 producirá una SocketExceptionexcepción . 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 la pila de protocolos, el ReceiveFrom método se completará inmediatamente y producirá 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 remoto llamando al Connect método o aceptando una conexión de host remoto entrante llamando al Accept método . Si no establece ni 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 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:

del AddressFamilyEndPoint objeto utilizado en ReceiveFrom debe coincidir con el AddressFamily de utilizado EndPoint en SendTo.

Nota:

Este miembro genera información de seguimiento al habilitar 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