Freigeben über


Socket.BeginReceiveFrom Methode

Definition

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

buffer
Byte[]

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

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

buffer ist null.

- oder -

remoteEP ist null.

.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 bufferist, 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.

Gilt für:

Weitere Informationen