Socket.ReceiveFrom Methode

Definition

Empfängt ein Datagramm und speichert den Endpunkt der Quelle.

Überlädt

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

Empfängt mithilfe der angegebenen SocketFlags die angegebene Anzahl von Bytes im Datenpuffer und speichert den Endpunkt.

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

Empfängt die angegebene Anzahl von Datenbytes an der angegebenen Position im Datenpuffer, verwendet dabei die angegebenen SocketFlags und speichert den Endpunkt.

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

Empfängt mithilfe der angegebenen SocketFlags ein Datagramm im Datenpuffer und speichert den Endpunkt.

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Empfängt mithilfe der angegebenen SocketFlags ein Datagramm im Datenpuffer und speichert den Endpunkt.

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

Empfängt mithilfe der angegebenen SocketFlags ein Datagramm im Datenpuffer und 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

Empfängt mithilfe der angegebenen SocketFlags die angegebene Anzahl von Bytes im Datenpuffer und 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 des Typs 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 einen EndPoint vom gleichen Typ wie der Endpunkt des Remotehosts, der bei erfolgreichem 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 den Socket tritt ein Betriebssystemfehler auf.

Der Socket wurde geschlossen.

Ein Aufrufer in der Aufrufliste 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.

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

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 beabsichtigen, verbindungslose Datagramme von einem unbekannten Host oder mehreren Hosts zu empfangen.

Diese Überladung erfordert nur, dass Sie einen Empfangspuffer, die Anzahl von Bytes, die Sie empfangen möchten, den erforderlichen SocketFlagsund einen EndPoint angeben, der den Remotehost darstellt. Der Pufferoffset ist standardmäßig auf 0 festgelegt.

Bei verbindungslosen Protokollen ReceiveFrom liest das erste in die Warteschlange eingereihte Datagramm in den lokalen Netzwerkpuffer. Wenn das empfangene Datagramm größer als die Größe von bufferist, füllt buffer die ReceiveFrom -Methode so viel wie möglich der Nachricht aus und löst eine ausSocketException. 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 ausreichend großen Puffer aufrufen.

Wenn keine Daten zum Lesen verfügbar sind, blockiert die ReceiveFrom -Methode, 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 aus SocketException. Sie können die Available -Eigenschaft verwenden, um zu bestimmen, ob Daten zum Lesen verfügbar sind. Wenn Available ungleich 0 ist, wiederholen Sie den Empfangsvorgang.

Obwohl ReceiveFrom für verbindungslose Protokolle vorgesehen ist, können Sie auch ein verbindungsorientiertes Protokoll verwenden. Wenn Sie sich dafür entscheiden, müssen Sie zunächst entweder 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 liest so viele Daten, wie verfügbar sind, bis zu der Anzahl von Bytes, ReceiveFrom die durch den size Parameter angegeben werden. Wenn der Remotehost die Verbindung mit der SocketShutdown -Methode beendet und alle verfügbaren Daten empfangen wurden, wird die ReceiveFrom Methode sofort abgeschlossen und gibt null Bytes zurück.

Hinweis

Vor dem Aufrufen ReceiveFromvon müssen Sie die mithilfe der SocketBind -Methode explizit an einen lokalen Endpunkt binden. Wenn sie dies nicht tun, ReceiveFrom löst eine aus SocketException. Wenn Sie erhalten eine SocketException, verwenden die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten. Nachdem Sie diesen Code erhalten haben, finden Sie in der Dokumentation zu Windows Sockets Version 2-API-Fehlercode eine ausführliche Beschreibung des Fehlers.

Hinweis

Die AddressFamily der EndPoint in ReceiveFrom verwendeten muss mit dem AddressFamily des EndPoint in SendToübereinstimmen.

Hinweis

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren. Weitere Informationen finden Sie unter Netzwerkablaufverfolgung in .NET Framework.

Weitere Informationen

Gilt für:

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

Quelle:
Socket.cs
Quelle:
Socket.cs
Quelle:
Socket.cs

Empfängt die angegebene Anzahl von Datenbytes an der angegebenen Position im Datenpuffer, verwendet dabei die angegebenen SocketFlags und 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 des Typs Byte, bei dem es sich um den Speicherort für empfangene Daten handelt.

offset
Int32

Die Position im buffer-Parameter, an der die empfangenen Daten gespeichert werden sollen.

size
Int32

Die Anzahl der zu empfangenden Bytes.

socketFlags
SocketFlags

Eine bitweise Kombination der SocketFlags-Werte.

remoteEP
EndPoint

Ein Verweis auf einen EndPoint vom gleichen Typ wie der Endpunkt des Remotehosts, der bei erfolgreichem 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 von buffer minus dem Wert des offset-Parameters.

socketFlags ist keine gültige Kombination von Werten.

- oder -

Die LocalEndPoint-Eigenschaft wurde nicht festgelegt.

- oder -

Fehler beim Versuch, auf den Socket zuzugreifen.

Der 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.

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

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 beabsichtigen, verbindungslose Datagramme von einem unbekannten Host oder mehreren Hosts zu empfangen.

Bei verbindungslosen Protokollen ReceiveFrom liest das erste in die Warteschlange eingereihte Datagramm in den lokalen Netzwerkpuffer. Wenn das empfangene Datagramm größer als die Größe von bufferist, füllt buffer die ReceiveFrom -Methode so viel wie möglich der Nachricht aus und löst eine ausSocketException. 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 ausreichend großen Puffer aufrufen.

Wenn keine Daten zum Lesen verfügbar sind, blockiert die ReceiveFrom -Methode, 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 aus SocketException. Sie können die Available -Eigenschaft verwenden, um zu bestimmen, ob Daten zum Lesen verfügbar sind. Wenn Available ungleich 0 ist, wiederholen Sie den Empfangsvorgang.

Obwohl ReceiveFrom für verbindungslose Protokolle vorgesehen ist, können Sie auch ein verbindungsorientiertes Protokoll verwenden. Wenn Sie sich dafür entscheiden, müssen Sie zunächst entweder eine Remotehostverbindung herstellen, indem Sie die Connect -Methode aufrufen oder eine eingehende Remotehostverbindung akzeptieren, indem Sie die Accept -Methode aufrufen. 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 liest so viele Daten, wie verfügbar sind, ReceiveFrom bis zu der menge an Bytes, die durch den size Parameter angegeben wird. Wenn der Remotehost die Verbindung mit der SocketShutdown -Methode herunterfährt 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 Socket explizit an einen lokalen Endpunkt binden, indem Sie die Bind -Methode verwenden. Wenn Sie dies nicht tun, ReceiveFrom wird ein SocketExceptionausgelöst. Wenn Sie erhalten eine SocketException, verwenden die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten. Nachdem Sie diesen Code erhalten haben, finden Sie eine ausführliche Beschreibung des Fehlers in der Dokumentation zur Windows Sockets-API, Version 2 .

Hinweis

Der AddressFamily der verwendeten in ReceiveFrom muss mit dem AddressFamily von übereinstimmen, der EndPoint in SendToverwendet wird.EndPoint

Hinweis

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren. Weitere Informationen finden Sie unter Netzwerkablaufverfolgung in .NET Framework.

Weitere Informationen

Gilt für:

ReceiveFrom(Span<Byte>, SocketFlags, EndPoint)

Quelle:
Socket.cs
Quelle:
Socket.cs
Quelle:
Socket.cs

Empfängt mithilfe der angegebenen SocketFlags ein Datagramm im Datenpuffer und 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 Bytespanne, die der Speicherort für empfangene Daten ist.

socketFlags
SocketFlags

Eine bitweise Kombination der SocketFlags-Werte.

remoteEP
EndPoint

Ein Verweis auf einen EndPoint vom gleichen Typ wie der Endpunkt des Remotehosts, der bei erfolgreicher Empfangsausführung aktualisiert werden soll.

Gibt zurück

Die Anzahl der empfangenen Bytes.

Ausnahmen

remoteEP ist null.

Fehler beim Versuch, auf den Socket zuzugreifen.

Der Socket wurde geschlossen.

Gilt für:

ReceiveFrom(Byte[], SocketFlags, EndPoint)

Quelle:
Socket.cs
Quelle:
Socket.cs
Quelle:
Socket.cs

Empfängt mithilfe der angegebenen SocketFlags ein Datagramm im Datenpuffer und 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 einen EndPoint vom gleichen Typ wie der Endpunkt des Remotehosts, der bei erfolgreicher Empfangsausführung aktualisiert werden soll.

Gibt zurück

Die Anzahl der empfangenen Bytes.

Ausnahmen

buffer ist null.

- oder -

remoteEP ist null.

Fehler beim Versuch, auf den Socket zuzugreifen.

Der Socket wurde geschlossen.

Ein Aufrufer in der Aufrufliste verfügt nicht über die erforderlichen Berechtigungen.

Beispiele

Das folgende Codebeispiel empfängt ein verbindungsloses Datagramm von einem Remotehost. SocketFlags werden an die ReceiveFrom -Methode übergeben.

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

Hinweise

Die ReceiveFrom -Methode liest Daten in den buffer Parameter ein, gibt die Anzahl der Bytes zurück, die erfolgreich gelesen wurden, 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 bereitstellen, der den Remotehost darstellt. Der Offset ist standardmäßig auf 0 und die Größe standardmäßig auf die Länge des Pufferparameters festgelegt.

Hinweis

Vor dem Aufrufen ReceiveFrommüssen Sie den Socket explizit an einen lokalen Endpunkt binden, indem Sie die Bind -Methode verwenden. Wenn Sie dies nicht tun, ReceiveFrom wird ein SocketExceptionausgelöst.

Mit verbindungslosen Protokollen liest das erste queuierte Datagramm, ReceiveFrom das in den lokalen Netzwerkpuffer empfangen wurde. Wenn das empfangene Datagramm größer als die Größe von bufferist, füllt buffer die ReceiveFrom -Methode so viele Nachrichten wie möglich aus, und löst einen ausSocketException. 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 ausreichend 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 einen aus SocketException. Sie können die Available -Eigenschaft verwenden, um zu bestimmen, ob Daten zum Lesen verfügbar sind. Wenn Available ungleich 0 ist, wiederholen Sie den Empfangsvorgang.

Obwohl ReceiveFrom für verbindungslose Protokolle vorgesehen ist, können Sie auch ein verbindungsorientiertes Protokoll verwenden. Wenn Sie sich dafür entscheiden, müssen Sie zunächst entweder eine Remotehostverbindung herstellen, indem Sie die Connect -Methode aufrufen oder eine eingehende Remotehostverbindung akzeptieren, indem Sie die Accept -Methode aufrufen. 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 liest so viele Daten, wie verfügbar sind, ReceiveFrom bis zur Größe von buffer. Wenn der Remotehost die Verbindung mit der SocketShutdown -Methode herunterfährt und alle verfügbaren Daten empfangen wurden, wird die ReceiveFrom Methode sofort abgeschlossen und gibt null Bytes zurück.

Hinweis

Wenn Sie erhalten eine SocketException, verwenden die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten. Nachdem Sie diesen Code erhalten haben, finden Sie eine ausführliche Beschreibung des Fehlers in der Dokumentation zur Windows Sockets-API, Version 2 .

Hinweis

Der AddressFamily der verwendeten in ReceiveFrom muss mit dem AddressFamily von übereinstimmen, der EndPoint in SendToverwendet wird.EndPoint

Hinweis

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren. Weitere Informationen finden Sie unter Netzwerkablaufverfolgung in .NET Framework.

Weitere Informationen

Gilt für:

ReceiveFrom(Span<Byte>, SocketFlags, SocketAddress)

Quelle:
Socket.cs
Quelle:
Socket.cs

Empfängt mithilfe der angegebenen SocketFlags ein Datagramm im Datenpuffer und 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 Bytespanne, die der Speicherort für empfangene Daten ist.

socketFlags
SocketFlags

Eine bitweise Kombination der SocketFlags-Werte.

receivedAddress
SocketAddress

Eine SocketAddress instance, die mit dem Wert des Remotepeers aktualisiert wird, wenn diese Methode zurückgibt.

Gibt zurück

Die Anzahl der empfangenen Bytes.

Ausnahmen

receivedAddress ist null.

Fehler beim Versuch, auf den Socket zuzugreifen.

Der Socket wurde geschlossen.

Gilt für:

ReceiveFrom(Span<Byte>, EndPoint)

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 Bytespanne, die der Speicherort für empfangene Daten ist.

remoteEP
EndPoint

Ein Verweis auf einen EndPoint vom gleichen Typ wie der Endpunkt des Remotehosts, der bei erfolgreicher Empfangsausführung aktualisiert werden soll.

Gibt zurück

Die Anzahl der empfangenen Bytes.

Ausnahmen

remoteEP ist null.

Fehler beim Versuch, auf den Socket zuzugreifen.

Der Socket wurde geschlossen.

Gilt für:

ReceiveFrom(Byte[], EndPoint)

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 des Typs Byte, bei dem es sich um den Speicherort für empfangene Daten handelt.

remoteEP
EndPoint

Ein Verweis auf einen EndPoint vom gleichen Typ wie der Endpunkt des Remotehosts, der bei erfolgreicher Empfangsausführung aktualisiert werden soll.

Gibt zurück

Die Anzahl der empfangenen Bytes.

Ausnahmen

buffer ist null.

- oder -

remoteEP ist null.

Fehler beim Versuch, auf den Socket zuzugreifen.

Der Socket wurde geschlossen.

Ein Aufrufer in der Aufrufliste verfügt nicht über die erforderlichen Berechtigungen.

Beispiele

Das folgende Codebeispiel empfängt ein verbindungsloses Datagramm von einem Remotehost.

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

Hinweise

Die ReceiveFrom -Methode liest Daten in den buffer Parameter ein, gibt die Anzahl der Bytes zurück, die erfolgreich gelesen wurden, 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 Empfangs buffer- und einen EndPoint bereitstellen, der den Remotehost darstellt. Der Pufferoffset 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 auf None.

Hinweis

Vor dem Aufrufen ReceiveFrommüssen Sie den Socket explizit an einen lokalen Endpunkt binden, indem Sie die Bind -Methode verwenden. Wenn Sie dies nicht tun, ReceiveFrom wird ein SocketExceptionausgelöst.

Mit verbindungslosen Protokollen liest das erste queuierte Datagramm, ReceiveFrom das in den lokalen Netzwerkpuffer empfangen wurde. Wenn das empfangene Datagramm größer als die Größe von bufferist, füllt buffer die ReceiveFrom -Methode so viel wie möglich der Nachricht aus und löst eine ausSocketException. 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 ausreichend großen Puffer aufrufen.

Wenn keine Daten zum Lesen verfügbar sind, blockiert die ReceiveFrom -Methode, 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 aus SocketException. Sie können die Available -Eigenschaft verwenden, um zu bestimmen, ob Daten zum Lesen verfügbar sind. Wenn Available ungleich 0 ist, wiederholen Sie den Empfangsvorgang.

Obwohl ReceiveFrom für verbindungslose Protokolle vorgesehen ist, können Sie auch ein verbindungsorientiertes Protokoll verwenden. Wenn Sie sich dafür entscheiden, müssen Sie zunächst entweder 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 liest bis zur Größe von bufferso viele Daten, ReceiveFrom wie verfügbar sind. Wenn der Remotehost die Verbindung mit der SocketShutdown -Methode beendet und alle verfügbaren Daten empfangen wurden, wird die ReceiveFrom Methode sofort abgeschlossen und gibt null Bytes zurück.

Hinweis

Wenn Sie erhalten eine SocketException, verwenden die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten. Nachdem Sie diesen Code erhalten haben, finden Sie in der Dokumentation zu Windows Sockets Version 2-API-Fehlercode eine ausführliche Beschreibung des Fehlers.

Hinweis

Die AddressFamily der EndPoint in ReceiveFrom verwendeten muss mit dem AddressFamily des EndPoint in SendToübereinstimmen.

Hinweis

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren. Weitere Informationen finden Sie unter Netzwerkablaufverfolgung in .NET Framework.

Weitere Informationen

Gilt für: