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.

nur .NET Framework und .NET 5 und früher: Fehler beim Versuch, auf den Socket zuzugreifen.

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 neue Entwicklung zu verwenden. Verwenden Sie stattdessen die Task-basierten Entsprechungen.

Sie können einen Rückruf übergeben, der implementiert wird, 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 die zurückgegebene 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 ein und erfasst den Remotehostendpunkt, von dem die Daten gesendet werden. Informationen zum Abrufen dieses Endpunkts finden Sie unter EndReceiveFrom. Diese Methode ist am nützlichsten, wenn Sie asynchron verbindungslose Datagramme von einem unbekannten Host oder mehreren Hosts empfangen möchten. In diesen Fällen liest das erste queuierte Datagramm, BeginReceiveFrom das in den lokalen Netzwerkpuffer empfangen wurde. Wenn das empfangene Datagramm größer als die Größe von bufferist, füllt buffer die BeginReceiveFrom -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 BeginReceiveFrom Methode mit einem ausreichend großen Puffer aufrufen.

Um sicherzustellen, dass der Remotehostendpunkt immer zurückgegeben wird, sollte eine Anwendung den Socket explizit an einen lokalen Endpunkt mithilfe der Bind -Methode binden und dann die SetSocketOption Methode aufrufen, wobei der optionLevel Parameter auf IP oder IPv6 festgelegt ist, der optionName Parameter auf PacketInformationfestgelegt ist, und den 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 -Methode oder BeginAccept aufrufen. Wenn Sie die BeginReceiveFrom -Methode aufrufen, bevor Sie eine Verbindung herstellen oder akzeptieren, erhalten Sie einen SocketException. Sie können auch einen Standard-Remotehost für ein verbindungsloses Protokoll einrichten, bevor Sie die BeginReceiveFrom Methode aufrufen.

Der remoteEp Parameter

Mit verbindungsorientierten Sockets liest so viele Daten, wie verfügbar sind, BeginReceiveFrom bis zur Anzahl von Bytes, 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 der nachfolgenden Verwendung dieses Kontexts eine Leistungsverbesserung angezeigt.

Gilt für:

Weitere Informationen