Socket.ReceiveFrom Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
- 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
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
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
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
- 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
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
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
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
- 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
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
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
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
- 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
- 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
- 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
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 buffer
y 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.