Freigeben über


Socket.ReceiveFrom Methode

Definition

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

buffer ist null.

- oder -

remoteEP ist null.

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

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

buffer ist null.

- oder -

remoteEP ist null.

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

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

buffer
Span<Byte>

Eine Spanne von Bytes, die der Speicherort für empfangene Daten ist.

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

buffer
Byte[]

Ein Array vom Typ Byte , das der Speicherort für die empfangenen Daten ist.

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

buffer ist null.

- oder -

remoteEP ist null.

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

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

buffer
Span<Byte>

Eine Spanne von Bytes, die der Speicherort für empfangene Daten ist.

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

buffer
Span<Byte>

Eine Spanne von Bytes, die der Speicherort für empfangene Daten ist.

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

buffer ist null.

- oder -

remoteEP ist null.

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.

Weitere Informationen

Gilt für: