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 mit dem asynchronen Empfangen von Daten von einem 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 Parameter, an dem buffer die 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 denselben EndPoint Typ wie der Endpunkt des Remotehosts, der beim synchronen Empfang aktualisiert werden soll.
- callback
- AsyncCallback
Die AsyncCallback Stellvertretung.
- state
- Object
Ein Objekt, das Statusinformationen für diese Anforderung enthält.
Gibt zurück
Ein IAsyncResult Verweis auf den asynchronen Lesevorgang.
Ausnahmen
.NET Framework und .NET 5 und früher: Beim Versuch, auf den Socket zuzugreifen, ist ein Fehler aufgetreten.
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 minus buffer des Werts des offset Parameters.
Das Socket wurde geschlossen.
Ein aufrufer höher im Aufrufstapel verfügt nicht über die Berechtigung für den angeforderten Vorgang.
Hinweise
Von Bedeutung
Dies ist eine Kompatibilitäts-API. Es wird nicht empfohlen, die Methoden APM (Begin* und End*) für die neue Entwicklung zu verwenden. Verwenden Sie stattdessen die Task-basierten Entsprechungen.
Sie können einen Rückruf übergeben, der AsyncCallback implementiert wird, um über den Abschluss des Vorgangs BeginReceiveFrom benachrichtigt zu werden. Wenn der zugrunde liegende Netzwerkstapel den Vorgang synchron abgeschlossen hat, wird der Rückruf während des Aufrufs BeginReceiveFrominline ausgeführt. In diesem Fall wird die CompletedSynchronously Eigenschaft für die zurückgegebene IAsyncResult Eigenschaft so festgelegt true , dass die Methode synchron abgeschlossen wurde. Verwenden Sie die AsyncState Eigenschaft des IAsyncResult Zustandsobjekts, das an die BeginReceiveFrom Methode übergeben wird.
Der asynchrone BeginReceiveFrom Vorgang muss durch Aufrufen der EndReceiveFrom Methode abgeschlossen werden. In der AsyncCallback Regel wird die Methode vom 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 am nützlichsten, wenn Sie asynchron verbindungslose Datagramme von einem unbekannten Host oder mehreren Hosts empfangen möchten. In diesen Fällen wird das erste enqueuierte Datagram gelesen, BeginReceiveFrom das in den lokalen Netzwerkpuffer empfangen wurde. Wenn das empfangene Datagramm größer als die Größe istbuffer, füllt buffer die BeginReceiveFrom 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 BeginReceiveFrom Methode mit einem großen Puffer aufrufen.
Um sicherzustellen, dass der Remotehostendpunkt immer zurückgegeben wird, sollte eine Anwendung die Socket Anwendung explizit mithilfe der Bind Methode an einen lokalen Endpunkt binden und dann die SetSocketOption Methode mit dem Parameter aufrufen, der optionLevel auf oder IPv6 entsprechend festgelegt IP ist, den optionName Parameter auf PacketInformation, und den optionValue Parameter, um diese Option zu aktivieren, bevor Sie die BeginReceiveFrom Methode aufrufen. Andernfalls ist es möglich, dass der Remotehostendpunkt nicht zurückgegeben wird, wenn der Absender eine Reihe von Datagrammen gesendet hat, bevor der Empfänger die BeginReceiveFrom Methode aufgerufen hat.
Obwohl BeginReceiveFrom 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 / BeginConnect Methode aufrufen oder eine eingehende Verbindungsanforderung akzeptieren, indem Sie die Accept Methode aufrufen.BeginAccept 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 BeginReceiveFrom werden so viele Daten wie verfügbar bis zur Anzahl der durch den size Parameter angegebenen Bytes gelesen.
Rufen Sie die Close Methode auf, um einen ausstehenden BeginReceiveFromVorgang abzubrechen.
Hinweis
Wenn Sie ein SocketExceptionObjekt erhalten, verwenden Sie die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode abzurufen.
Hinweis
Dieses Mitglied gibt Protokollierungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in Ihrer Anwendung aktivieren. Weitere Informationen finden Sie unter Network Tracing 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 Instanz und einem bestimmten Socket Rückruf) wird bei nachfolgenden Verwendungen dieses Kontexts eine Leistungsverbesserung angezeigt.