Socket.BeginReceiveFrom 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.
Beginnt den asynchronen Datenempfang aus dem angegebenen Netzwerkgerät.
public:
IAsyncResult ^ BeginReceiveFrom(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, System::Net::EndPoint ^ % remoteEP, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback? callback, object? state);
public IAsyncResult BeginReceiveFrom (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, ref System.Net.EndPoint remoteEP, AsyncCallback callback, object state);
member this.BeginReceiveFrom : byte[] * int * int * System.Net.Sockets.SocketFlags * EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginReceiveFrom (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef remoteEP As EndPoint, callback As AsyncCallback, state As Object) As IAsyncResult
Parameter
- offset
- Int32
Die nullbasierte Position im buffer
-Parameter, an der die Daten gespeichert werden.
- 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 beim synchronen Empfang aktualisiert werden soll.
- callback
- AsyncCallback
Der AsyncCallback -Delegat.
- state
- Object
Ein Objekt mit Zustandsinformationen für diese Anforderung.
Gibt zurück
Ein IAsyncResult, das auf den asynchronen Lesevorgang verweist.
Ausnahmen
.NET Framework und .NET 5 und früher: Fehler beim Zugriff auf den Socket.
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.
Der Socket wurde geschlossen.
Ein höher in der Aufrufliste befindlicher Aufrufer verfügt nicht über die Berechtigung für den angeforderten Vorgang.
Hinweise
Wichtig
Dies ist eine Kompatibilitäts-API. Es wird nicht empfohlen, die Methoden APM (Begin*
und End*
) für die Neuentwicklung zu verwenden. Verwenden Sie stattdessen die Task
-basierten Entsprechungen.
Sie können einen Rückruf übergeben, der implementiert, BeginReceiveFrom um über den Abschluss des Vorgangs AsyncCallback benachrichtigt zu werden. Beachten Sie, dass der Rückruf während des Aufrufs BeginReceiveFromvon inline ausgeführt wird, wenn der zugrunde liegende Netzwerkstapel den Vorgang synchron abschließt. In diesem Fall wird die CompletedSynchronously -Eigenschaft für den zurückgegebenen IAsyncResult auf true
festgelegt, um anzugeben, dass die Methode synchron abgeschlossen wurde. Verwenden Sie die AsyncState -Eigenschaft von IAsyncResult , um das an die -Methode übergebene Zustandsobjekt BeginReceiveFrom abzurufen.
Der asynchrone BeginReceiveFrom Vorgang muss durch Aufrufen der EndReceiveFrom -Methode abgeschlossen werden. In der Regel wird die -Methode vom AsyncCallback Delegaten aufgerufen. EndReceiveFrom blockiert den aufrufenden Thread, bis der Vorgang abgeschlossen ist.
Diese Methode liest Daten in den buffer
Parameter und erfasst den Remotehostendpunkt, von dem die Daten gesendet werden. Informationen zum Abrufen dieses Endpunkts finden Sie unter EndReceiveFrom. Diese Methode ist besonders nützlich, wenn Sie beabsichtigen, verbindungslose Datagramme asynchron von einem unbekannten Host oder mehreren Hosts zu empfangen. In diesen Fällen liest das erste in die Warteschlange eingereihte Datagramm, BeginReceiveFrom das in den puffer des lokalen Netzwerks empfangen wurde. Wenn das empfangene Datagramm größer als die Größe von buffer
ist, füllt buffer
die BeginReceiveFrom -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 BeginReceiveFrom -Methode mit einem ausreichend großen Puffer aufrufen.
Um zu gewährleisten, dass der Remotehostendpunkt immer zurückgegeben wird, sollte eine Anwendung explizit Socket mithilfe der Bind -Methode an einen lokalen Endpunkt binden und dann die SetSocketOption -Methode aufrufen, wobei der optionLevel
Parameter auf IP oder IPv6 festgelegt ist, der optionName
Parameter auf PacketInformationfestgelegt ist, und dem optionValue
Parameter, um diese Option zu aktivieren, bevor die BeginReceiveFrom -Methode aufgerufen wird. Andernfalls kann der Remotehostendpunkt nicht zurückgegeben werden, wenn der Absender eine Reihe von Datagrammen gesendet hat, bevor der Empfänger die BeginReceiveFrom -Methode aufgerufen hat.
Obwohl BeginReceiveFrom 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 / BeginConnect -Methode aufrufen, oder eine eingehende Verbindungsanforderung akzeptieren, indem Sie die Accept - oder BeginAccept -Methode aufrufen. Wenn Sie die BeginReceiveFrom -Methode aufrufen, bevor Sie eine Verbindung herstellen oder akzeptieren, erhalten Sie eine SocketException. Sie können auch einen Standard-Remotehost für ein verbindungsloses Protokoll einrichten, bevor Sie die BeginReceiveFrom -Methode aufrufen.
Der remoteEp
Parameter
Bei verbindungsorientierten Sockets liest so viele Daten, wie verfügbar sind, bis zu der Anzahl von Bytes, BeginReceiveFrom die durch den size
Parameter angegeben werden.
Um einen ausstehenden BeginReceiveFromabzubrechen, rufen Sie die Close -Methode auf.
Hinweis
Wenn Sie erhalten eine SocketException, verwenden die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten.
Hinweis
Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren. Weitere Informationen finden Sie unter Netzwerkablaufverfolgung in .NET Framework.
Hinweis
Der Ausführungskontext (der Sicherheitskontext, der identitätswechselte Benutzer und der aufrufende Kontext) wird für die asynchronen Socket Methoden zwischengespeichert. Nach der ersten Verwendung eines bestimmten Kontexts (einer bestimmten asynchronen Socket Methode, einer bestimmten Socket instance und einem bestimmten Rückruf) wird bei nachfolgenden Verwendungen dieses Kontexts eine Leistungsverbesserung angezeigt.