Socket.ReceiveFrom Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Empfängt ein Datagramm und speichert den Quellendpunkt.
Überlädt
| Name | Beschreibung |
|---|---|
| ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint) |
Empfängt die angegebene Anzahl von Bytes in den Datenpuffer mit dem angegebenen SocketFlagsUnd speichert den Endpunkt. |
| ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint) |
Empfängt die angegebene Anzahl von Byte an der angegebenen Position des Datenpuffers unter Verwendung des angegebenen SocketFlagsUnd speichert den Endpunkt. |
| ReceiveFrom(Span<Byte>, SocketFlags, EndPoint) |
Empfängt ein Datagramm im Datenpuffer mithilfe des angegebenen SocketFlagsUnd speichert den Endpunkt. |
| ReceiveFrom(Byte[], SocketFlags, EndPoint) |
Empfängt ein Datagramm im Datenpuffer mithilfe des angegebenen SocketFlagsUnd speichert den Endpunkt. |
| ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress) |
Empfängt ein Datagramm im Datenpuffer mithilfe des angegebenen SocketFlagsUnd speichert den Endpunkt. |
| ReceiveFrom(Span<Byte>, EndPoint) |
Empfängt ein Datagramm im Datenpuffer und speichert den Endpunkt. |
| ReceiveFrom(Byte[], EndPoint) |
Empfängt ein Datagramm im Datenpuffer und speichert den Endpunkt. |
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint)
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
Empfängt die angegebene Anzahl von Bytes in den Datenpuffer mit dem angegebenen SocketFlagsUnd speichert den Endpunkt.
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
Parameter
- buffer
- Byte[]
Ein Array vom Typ Byte , bei dem es sich um den Speicherort für empfangene Daten handelt.
- size
- Int32
Die Anzahl der zu empfangenden Bytes.
- socketFlags
- SocketFlags
Eine bitweise Kombination der SocketFlags Werte.
- remoteEP
- EndPoint
Ein Verweis auf denselben EndPoint Typ wie der Endpunkt des Remotehosts, der beim erfolgreichen Empfang aktualisiert werden soll.
Gibt zurück
Die Anzahl der empfangenen Bytes.
Ausnahmen
size ist kleiner als 0.
- oder -
size ist größer als die Länge von buffer.
socketFlags ist keine gültige Kombination von Werten.
- oder -
Die LocalEndPoint Eigenschaft wurde nicht festgelegt.
- oder -
Beim Zugriff auf das SocketBetriebssystem tritt ein Fehler auf.
Das Socket wurde geschlossen.
Ein Aufrufer im Aufrufstapel verfügt nicht über die erforderlichen Berechtigungen.
Beispiele
Im folgenden Codebeispiel wird ein verbindungsloses Datagramm von einem Remotehost empfangen. Die Puffergröße und SocketFlags werden an die ReceiveFrom Methode übergeben.
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
Hinweise
Die ReceiveFrom Methode liest Daten in den buffer Parameter, gibt die Anzahl der erfolgreich gelesenen Bytes zurück und erfasst den Remotehostendpunkt, von dem die Daten gesendet wurden. Diese Methode ist nützlich, wenn Sie verbindungslose Datagramme von einem unbekannten Host oder mehreren Hosts empfangen möchten.
Diese Überladung erfordert nur, dass Sie einen Empfangspuffer, die Anzahl der Bytes, die Sie empfangen möchten, die erforderliche SocketFlagsund ein EndPoint , der den Remotehost darstellt. Der Pufferversatz ist standardmäßig auf 0 festgelegt.
Bei verbindungslosen Protokollen liest das erste enqueuierte Datagram, ReceiveFrom das in den lokalen Netzwerkpuffer empfangen wurde. Wenn das empfangene Datagramm größer als die Größe istbuffer, füllt buffer die ReceiveFrom Methode so viele Nachrichten wie möglich aus, und löst ein SocketException. Wenn Sie ein unzuverlässiges Protokoll verwenden, gehen die überschüssigen Daten verloren. Wenn Sie ein zuverlässiges Protokoll verwenden, werden die überschüssigen Daten vom Dienstanbieter aufbewahrt, und Sie können sie abrufen, indem Sie die ReceiveFrom Methode mit einem großen Puffer aufrufen.
Wenn keine Daten zum Lesen verfügbar sind, wird die ReceiveFrom Methode blockiert, bis Daten verfügbar sind. Wenn Sie sich im nicht blockierenden Modus befinden und keine Daten im Protokollstapelpuffer verfügbar sind, wird die ReceiveFrom Methode sofort abgeschlossen und löst eine SocketException. Mit der Available Eigenschaft können Sie ermitteln, ob Daten zum Lesen verfügbar sind. Wenn Available es sich nicht um Null handelt, versuchen Sie den Empfangsvorgang erneut.
Obwohl ReceiveFrom sie für verbindungslose Protokolle vorgesehen ist, können Sie auch ein verbindungsorientiertes Protokoll verwenden. Wenn Sie dies tun, müssen Sie zuerst eine Remotehostverbindung herstellen, indem Sie die Connect Methode aufrufen oder eine eingehende Remotehostverbindung durch Aufrufen der Accept Methode akzeptieren. Wenn Sie vor dem Aufrufen der ReceiveFrom Methode keine Verbindung herstellen oder akzeptieren, erhalten Sie eine SocketException. Sie können auch einen Standard-Remotehost für ein verbindungsloses Protokoll einrichten, bevor Sie die ReceiveFrom Methode aufrufen.
Bei verbindungsorientierten Sockets ReceiveFrom werden so viele Daten wie verfügbar bis zur Anzahl der durch den size Parameter angegebenen Bytes gelesen. Wenn der Remotehost die Socket Verbindung mit der Shutdown Methode herunterfahren und alle verfügbaren Daten empfangen wurden, wird die ReceiveFrom Methode sofort abgeschlossen und gibt null Bytes zurück.
Hinweis
Vor dem Aufrufen ReceiveFrommüssen Sie den expliziten Binden an Socket einen lokalen Endpunkt mithilfe der Bind Methode. Wenn Sie dies nicht tun, ReceiveFrom wird ein SocketException. Wenn Sie ein SocketExceptionObjekt erhalten, verwenden Sie die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode abzurufen. Nachdem Sie diesen Code erhalten haben, finden Sie in der Windows Sockets Version 2-API-Fehlercodedokumentation eine detaillierte Beschreibung des Fehlers.
Hinweis
Die AddressFamily verwendeten EndPoint Ins ReceiveFrom müssen mit dem AddressFamily des EndPoint verwendeten Ins SendToübereinstimmen.
Hinweis
Dieses Mitglied gibt Protokollierungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in Ihrer Anwendung aktivieren. Weitere Informationen finden Sie unter Network Tracing in .NET Framework.
Weitere Informationen
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Gilt für:
ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint)
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
Empfängt die angegebene Anzahl von Byte an der angegebenen Position des Datenpuffers unter Verwendung des angegebenen SocketFlagsUnd speichert den Endpunkt.
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
Parameter
- buffer
- Byte[]
Ein Array vom Typ Byte , bei dem es sich um den Speicherort für empfangene Daten handelt.
- offset
- Int32
Die Position im buffer Parameter zum Speichern der empfangenen Daten.
- size
- Int32
Die Anzahl der zu empfangenden Bytes.
- socketFlags
- SocketFlags
Eine bitweise Kombination der SocketFlags Werte.
- remoteEP
- EndPoint
Ein Verweis auf denselben EndPoint Typ wie der Endpunkt des Remotehosts, der beim erfolgreichen Empfang aktualisiert werden soll.
Gibt zurück
Die Anzahl der empfangenen Bytes.
Ausnahmen
offset ist kleiner als 0.
- oder -
offset ist größer als die Länge von buffer.
- oder -
size ist kleiner als 0.
- oder -
size ist größer als die Länge des buffer Minuswerts des Offsetparameters.
socketFlags ist keine gültige Kombination von Werten.
- oder -
Die LocalEndPoint Eigenschaft wurde nicht festgelegt.
- oder -
Beim Versuch, auf den Socket zuzugreifen, ist ein Fehler aufgetreten.
Das Socket wurde geschlossen.
Beispiele
Im folgenden Codebeispiel wird ein verbindungsloses Datagramm von einem Remotehost empfangen. Der Offset, die Puffergröße und SocketFlags werden an die ReceiveFrom Methode übergeben.
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
Hinweise
Die ReceiveFrom Methode liest Daten in den buffer Parameter, gibt die Anzahl der erfolgreich gelesenen Bytes zurück und erfasst den Remotehostendpunkt, von dem die Daten gesendet wurden. Diese Methode ist nützlich, wenn Sie verbindungslose Datagramme von einem unbekannten Host oder mehreren Hosts empfangen möchten.
Bei verbindungslosen Protokollen liest das erste enqueuierte Datagram, ReceiveFrom das in den lokalen Netzwerkpuffer empfangen wurde. Wenn das empfangene Datagramm größer als die Größe istbuffer, füllt buffer die ReceiveFrom Methode so viele Nachrichten wie möglich aus, und löst ein SocketException. Wenn Sie ein unzuverlässiges Protokoll verwenden, gehen die überschüssigen Daten verloren. Wenn Sie ein zuverlässiges Protokoll verwenden, werden die überschüssigen Daten vom Dienstanbieter aufbewahrt, und Sie können sie abrufen, indem Sie die ReceiveFrom Methode mit einem großen Puffer aufrufen.
Wenn keine Daten zum Lesen verfügbar sind, wird die ReceiveFrom Methode blockiert, bis Daten verfügbar sind. Wenn Sie sich im nicht blockierenden Modus befinden und keine Daten im Protokollstapelpuffer verfügbar sind, wird die ReceiveFrom Methode sofort abgeschlossen und löst eine SocketException. Mit der Available Eigenschaft können Sie ermitteln, ob Daten zum Lesen verfügbar sind. Wenn Available es sich nicht um Null handelt, versuchen Sie den Empfangsvorgang erneut.
Obwohl ReceiveFrom sie für verbindungslose Protokolle vorgesehen ist, können Sie auch ein verbindungsorientiertes Protokoll verwenden. Wenn Sie dies tun, müssen Sie zuerst eine Remotehostverbindung herstellen, indem Sie die Connect Methode aufrufen oder eine eingehende Remotehostverbindung durch Aufrufen der Accept Methode akzeptieren. Wenn Sie vor dem Aufrufen der ReceiveFrom Methode keine Verbindung herstellen oder akzeptieren, erhalten Sie eine SocketException. Sie können auch einen Standard-Remotehost für ein verbindungsloses Protokoll einrichten, bevor Sie die ReceiveFrom Methode aufrufen.
Bei verbindungsorientierten Sockets ReceiveFrom werden so viele Daten wie verfügbar bis zur durch den size Parameter angegebenen Bytemenge gelesen. Wenn der Remotehost die Verbindung mit der SocketShutdown Methode herunterfahren und alle verfügbaren Daten empfangen wurden, wird die ReceiveFrom Methode sofort abgeschlossen und gibt null Bytes zurück.
Hinweis
Vor dem Aufrufen ReceiveFrommüssen Sie den expliziten Binden an Socket einen lokalen Endpunkt mithilfe der Bind Methode. Wenn Sie dies nicht tun, ReceiveFrom wird ein SocketException. Wenn Sie ein SocketExceptionObjekt erhalten, verwenden Sie die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode abzurufen. Nachdem Sie diesen Code erhalten haben, finden Sie in der Windows Sockets Version 2-API-Fehlercodedokumentation eine detaillierte Beschreibung des Fehlers.
Hinweis
Die AddressFamily verwendeten EndPoint Ins ReceiveFrom müssen mit dem AddressFamily des EndPoint verwendeten Ins SendToübereinstimmen.
Hinweis
Dieses Mitglied gibt Protokollierungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in Ihrer Anwendung aktivieren. Weitere Informationen finden Sie unter Network Tracing in .NET Framework.
Weitere Informationen
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Gilt für:
ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
Empfängt ein Datagramm im Datenpuffer mithilfe des angegebenen SocketFlagsUnd speichert den Endpunkt.
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
Parameter
- socketFlags
- SocketFlags
Eine bitweise Kombination der SocketFlags Werte.
- remoteEP
- EndPoint
Ein Verweis auf denselben EndPoint Typ wie der Endpunkt des Remotehosts, der beim erfolgreichen Empfang aktualisiert werden soll.
Gibt zurück
Die Anzahl der empfangenen Bytes.
Ausnahmen
remoteEP ist null.
Beim Versuch, auf den Socket zuzugreifen, ist ein Fehler aufgetreten.
Das Socket wurde geschlossen.
Gilt für:
ReceiveFrom(Byte[], SocketFlags, EndPoint)
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
Empfängt ein Datagramm im Datenpuffer mithilfe des angegebenen SocketFlagsUnd speichert den Endpunkt.
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
Parameter
- socketFlags
- SocketFlags
Eine bitweise Kombination der SocketFlags Werte.
- remoteEP
- EndPoint
Ein Verweis auf denselben EndPoint Typ wie der Endpunkt des Remotehosts, der beim erfolgreichen Empfang aktualisiert werden soll.
Gibt zurück
Die Anzahl der empfangenen Bytes.
Ausnahmen
Beim Versuch, auf den Socket zuzugreifen, ist ein Fehler aufgetreten.
Das Socket wurde geschlossen.
Ein Aufrufer im Aufrufstapel verfügt nicht über die erforderlichen Berechtigungen.
Beispiele
Im folgenden Codebeispiel wird ein verbindungsloses Datagramm von einem Remotehost empfangen. SocketFlags werden an die ReceiveFrom Methode übergeben.
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
Hinweise
Die ReceiveFrom Methode liest Daten in den buffer Parameter, gibt die Anzahl der erfolgreich gelesenen Bytes zurück und erfasst den Remotehostendpunkt, von dem die Daten gesendet wurden. Diese Methode ist nützlich, wenn Sie verbindungslose Datagramme von einem unbekannten Host oder mehreren Hosts empfangen möchten.
Diese Überladung erfordert nur, dass Sie einen Empfangspuffer, den erforderlichen SocketFlagsund einen EndPoint , der den Remotehost darstellt. Der Offset ist standardmäßig auf 0 festgelegt, und die Größe wird standardmäßig auf die Länge des Pufferparameters festgelegt.
Hinweis
Vor dem Aufrufen ReceiveFrommüssen Sie den expliziten Binden an Socket einen lokalen Endpunkt mithilfe der Bind Methode. Wenn Sie dies nicht tun, ReceiveFrom wird ein SocketException.
Bei verbindungslosen Protokollen liest das erste enqueuierte Datagram, ReceiveFrom das in den lokalen Netzwerkpuffer empfangen wurde. Wenn das empfangene Datagramm größer als die Größe istbuffer, füllt buffer die ReceiveFrom Methode so viele Nachrichten wie möglich aus, und löst ein SocketException. Wenn Sie ein unzuverlässiges Protokoll verwenden, gehen die überschüssigen Daten verloren. Wenn Sie ein zuverlässiges Protokoll verwenden, werden die überschüssigen Daten vom Dienstanbieter aufbewahrt, und Sie können sie abrufen, indem Sie die ReceiveFrom Methode mit einem großen Puffer aufrufen.
Wenn keine Daten zum Lesen verfügbar sind, wird die ReceiveFrom Methode blockiert, bis Daten verfügbar sind. Wenn Sie sich im nicht blockierenden Modus befinden und keine Daten im Protokollstapelpuffer verfügbar sind, wird die ReceiveFrom Methode sofort abgeschlossen und löst eine SocketException. Mit der Available Eigenschaft können Sie ermitteln, ob Daten zum Lesen verfügbar sind. Wenn Available es sich nicht um Null handelt, versuchen Sie den Empfangsvorgang erneut.
Obwohl ReceiveFrom sie für verbindungslose Protokolle vorgesehen ist, können Sie auch ein verbindungsorientiertes Protokoll verwenden. Wenn Sie dies tun, müssen Sie zuerst eine Remotehostverbindung herstellen, indem Sie die Connect Methode aufrufen oder eine eingehende Remotehostverbindung durch Aufrufen der Accept Methode akzeptieren. Wenn Sie vor dem Aufrufen der ReceiveFrom Methode keine Verbindung herstellen oder akzeptieren, erhalten Sie eine SocketException. Sie können auch einen Standard-Remotehost für ein verbindungsloses Protokoll einrichten, bevor Sie die ReceiveFrom Methode aufrufen.
Mit verbindungsorientierten Sockets ReceiveFrom werden so viele Daten wie verfügbar bis zur Größe von buffer. Wenn der Remotehost die Verbindung mit der SocketShutdown Methode herunterfahren und alle verfügbaren Daten empfangen wurden, wird die ReceiveFrom Methode sofort abgeschlossen und gibt null Bytes zurück.
Hinweis
Wenn Sie ein SocketExceptionObjekt erhalten, verwenden Sie die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode abzurufen. Nachdem Sie diesen Code erhalten haben, finden Sie in der Windows Sockets Version 2-API-Fehlercodedokumentation eine detaillierte Beschreibung des Fehlers.
Hinweis
Die AddressFamily verwendeten EndPoint Ins ReceiveFrom müssen mit dem AddressFamily des EndPoint verwendeten Ins SendToübereinstimmen.
Hinweis
Dieses Mitglied gibt Protokollierungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in Ihrer Anwendung aktivieren. Weitere Informationen finden Sie unter Network Tracing in .NET Framework.
Weitere Informationen
- Connect(EndPoint)
- Receive(Byte[], Int32, SocketFlags)
- Available
- Shutdown(SocketShutdown)
- Close()
- SocketFlags
Gilt für:
ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
Empfängt ein Datagramm im Datenpuffer mithilfe des angegebenen SocketFlagsUnd speichert den Endpunkt.
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
Parameter
- socketFlags
- SocketFlags
Eine bitweise Kombination der SocketFlags Werte.
- receivedAddress
- SocketAddress
Eine SocketAddress Instanz, die mit dem Wert des Remotespeers aktualisiert wird, wenn diese Methode zurückgegeben wird.
Gibt zurück
Die Anzahl der empfangenen Bytes.
Ausnahmen
receivedAddress ist null.
Beim Versuch, auf den Socket zuzugreifen, ist ein Fehler aufgetreten.
Das Socket wurde geschlossen.
Gilt für:
ReceiveFrom(Span<Byte>, EndPoint)
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
Empfängt ein Datagramm im Datenpuffer und speichert den Endpunkt.
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
Parameter
- remoteEP
- EndPoint
Ein Verweis auf denselben EndPoint Typ wie der Endpunkt des Remotehosts, der beim erfolgreichen Empfang aktualisiert werden soll.
Gibt zurück
Die Anzahl der empfangenen Bytes.
Ausnahmen
remoteEP ist null.
Beim Versuch, auf den Socket zuzugreifen, ist ein Fehler aufgetreten.
Das Socket wurde geschlossen.
Gilt für:
ReceiveFrom(Byte[], EndPoint)
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
- Quelle:
- Socket.cs
Empfängt ein Datagramm im Datenpuffer und speichert den Endpunkt.
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
Parameter
- buffer
- Byte[]
Ein Array vom Typ Byte , bei dem es sich um den Speicherort für empfangene Daten handelt.
- remoteEP
- EndPoint
Ein Verweis auf denselben EndPoint Typ wie der Endpunkt des Remotehosts, der beim erfolgreichen Empfang aktualisiert werden soll.
Gibt zurück
Die Anzahl der empfangenen Bytes.
Ausnahmen
Beim Versuch, auf den Socket zuzugreifen, ist ein Fehler aufgetreten.
Das Socket wurde geschlossen.
Ein Aufrufer im Aufrufstapel verfügt nicht über die erforderlichen Berechtigungen.
Beispiele
Im folgenden Codebeispiel wird ein verbindungsloses Datagramm von einem Remotehost empfangen.
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
Hinweise
Die ReceiveFrom Methode liest Daten in den buffer Parameter, gibt die Anzahl der erfolgreich gelesenen Bytes zurück und erfasst den Remotehostendpunkt, von dem die Daten gesendet wurden. Diese Methode ist nützlich, wenn Sie verbindungslose Datagramme von einem unbekannten Host oder mehreren Hosts empfangen möchten.
Diese Überladung erfordert nur, dass Sie einen Empfang bufferbereitstellen und einen EndPoint , der den Remotehost darstellt. Der Pufferversatz ist standardmäßig auf 0 festgelegt. Die Größe wird standardmäßig auf die Länge des buffer Parameters festgelegt, und der socketFlags Wert ist standardmäßig Nonefestgelegt.
Hinweis
Vor dem Aufrufen ReceiveFrommüssen Sie den expliziten Binden an Socket einen lokalen Endpunkt mithilfe der Bind Methode. Wenn Sie dies nicht tun, ReceiveFrom wird ein SocketException.
Bei verbindungslosen Protokollen liest das erste enqueuierte Datagram, ReceiveFrom das in den lokalen Netzwerkpuffer empfangen wurde. Wenn das empfangene Datagramm größer als die Größe istbuffer, füllt buffer die ReceiveFrom Methode so viele Nachrichten wie möglich aus, und löst ein SocketException. Wenn Sie ein unzuverlässiges Protokoll verwenden, gehen die überschüssigen Daten verloren. Wenn Sie ein zuverlässiges Protokoll verwenden, werden die überschüssigen Daten vom Dienstanbieter aufbewahrt, und Sie können sie abrufen, indem Sie die ReceiveFrom Methode mit einem großen Puffer aufrufen.
Wenn keine Daten zum Lesen verfügbar sind, wird die ReceiveFrom Methode blockiert, bis Daten verfügbar sind. Wenn Sie sich im nicht blockierenden Modus befinden und keine Daten im Protokollstapelpuffer verfügbar sind, wird die ReceiveFrom Methode sofort abgeschlossen und löst eine SocketException. Mit der Available Eigenschaft können Sie ermitteln, ob Daten zum Lesen verfügbar sind. Wenn Available es sich nicht um Null handelt, versuchen Sie den Empfangsvorgang erneut.
Obwohl ReceiveFrom sie für verbindungslose Protokolle vorgesehen ist, können Sie auch ein verbindungsorientiertes Protokoll verwenden. Wenn Sie dies tun, müssen Sie zuerst eine Remotehostverbindung herstellen, indem Sie die Connect Methode aufrufen oder eine eingehende Remotehostverbindung durch Aufrufen der Accept Methode akzeptieren. Wenn Sie vor dem Aufrufen der ReceiveFrom Methode keine Verbindung herstellen oder akzeptieren, erhalten Sie eine SocketException. Sie können auch einen Standard-Remotehost für ein verbindungsloses Protokoll einrichten, bevor Sie die ReceiveFrom Methode aufrufen.
Mit verbindungsorientierten Sockets ReceiveFrom werden so viele Daten wie verfügbar bis zur Größe von buffer. Wenn der Remotehost die Socket Verbindung mit der Shutdown Methode herunterfahren und alle verfügbaren Daten empfangen wurden, wird die ReceiveFrom Methode sofort abgeschlossen und gibt null Bytes zurück.
Hinweis
Wenn Sie ein SocketExceptionObjekt erhalten, verwenden Sie die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode abzurufen. Nachdem Sie diesen Code erhalten haben, finden Sie in der Windows Sockets Version 2-API-Fehlercodedokumentation eine detaillierte Beschreibung des Fehlers.
Hinweis
Die AddressFamily verwendeten EndPoint Ins ReceiveFrom müssen mit dem AddressFamily des EndPoint verwendeten Ins SendToübereinstimmen.
Hinweis
Dieses Mitglied gibt Protokollierungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in Ihrer Anwendung aktivieren. Weitere Informationen finden Sie unter Network Tracing in .NET Framework.