NegotiateStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Methode

Definition

Startet einen asynchronen Lesevorgang, der Daten aus dem Datenstrom liest und im angegebenen Array speichert.

public:
 override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ asyncCallback, System::Object ^ asyncState);
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback? asyncCallback, object? asyncState);
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState);
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, asyncCallback As AsyncCallback, asyncState As Object) As IAsyncResult

Parameter

buffer
Byte[]

Ein Byte Array, das die aus dem Datenstrom gelesenen Bytes empfängt.

offset
Int32

Der nullbasierte Speicherort, an buffer dem die Auslesedaten aus diesem Datenstrom gespeichert werden sollen.

count
Int32

Die maximale Anzahl von Bytes, die aus dem Datenstrom gelesen werden sollen.

asyncCallback
AsyncCallback

Ein AsyncCallback Delegat, der auf die Methode verweist, die aufgerufen werden soll, wenn der Lesevorgang abgeschlossen ist.

asyncState
Object

Ein benutzerdefiniertes Objekt, das Informationen zum Lesevorgang enthält. Dieses Objekt wird an den asyncCallback Delegaten übergeben, wenn der Vorgang abgeschlossen ist.

Gibt zurück

Ein IAsyncResult Objekt, das den Status des asynchronen Vorgangs angibt.

Ausnahmen

buffer ist null.

offset ist kleiner als 0.

-oder-

offset ist größer als die Länge von buffer.

-oder-

offset Plus count ist größer als die Länge von buffer.

Fehler beim Lesevorgang.

-oder-

Verschlüsselung wird verwendet, aber die Daten konnten nicht entschlüsselt werden.

Es wird bereits ein Lesevorgang ausgeführt.

Dieses Objekt wurde geschlossen.

Die Authentifizierung ist nicht aufgetreten.

Beispiele

Im folgenden Codebeispiel wird das Starten eines asynchronen Lesevorgangs veranschaulicht. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die NegotiateStream Klasse bereitgestellt wird.

public static void AuthenticateClient(TcpClient clientRequest)
{
    NetworkStream stream = clientRequest.GetStream();
    // Create the NegotiateStream.
    NegotiateStream authStream = new NegotiateStream(stream, false);
    // Save the current client and NegotiateStream instance
    // in a ClientState object.
    ClientState cState = new ClientState(authStream, clientRequest);
    // Listen for the client authentication request.
    Task authTask = authStream
        .AuthenticateAsServerAsync()
        .ContinueWith(task => { EndAuthenticateCallback(cState); });

    // Any exceptions that occurred during authentication are
    // thrown by the EndAuthenticateAsServer method.
    try
    {
        // This call blocks until the authentication is complete.
        authTask.Wait();
    }
    catch (AuthenticationException e)
    {
        Console.WriteLine(e);
        Console.WriteLine("Authentication failed - closing connection.");
        return;
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        Console.WriteLine("Closing connection.");
        return;
    }

    Task<int> readTask = authStream
        .ReadAsync(cState.Buffer, 0, cState.Buffer.Length);

    readTask
        .ContinueWith((task) => { EndReadCallback(cState, task.Result); })
        .Wait();
    // Finished with the current client.
    authStream.Close();
    clientRequest.Close();
}

Hinweise

Wenn Verschlüsselung, Signatur oder Verschlüsselung und Signatur aktiviert sind, liest der Lesevorgang die Daten aus dem zugrunde liegenden Datenstrom, überprüft die Integrität der Daten und entschlüsselt sie. Wenn keine Sicherheitsdienste wie Datenverschlüsselung oder Anmeldung verwendet werden, startet diese Methode einen asynchronen Lesevorgang für den zugrunde liegenden Datenstrom.

Diese Methode ist asynchron und blockiert nicht, während der Vorgang abgeschlossen ist. Um zu blockieren, bis der Vorgang abgeschlossen ist, verwenden Sie die Read Methode.

Der asynchrone Lesevorgang muss durch Aufrufen der EndRead Methode abgeschlossen werden. In der asyncCallback Regel wird die Methode vom Delegaten aufgerufen. Ausführliche Informationen zur Verwendung des asynchronen Programmiermodells finden Sie unter asynchrones Aufrufen synchroner Methoden

Die NegotiateStream Klasse unterstützt nicht mehrere gleichzeitige Lesevorgänge. Wenn Sie versuchen, einen Lesevorgang zu starten, während ein anderer Lesevorgang bereits im gleichen Datenstrom ausgeführt wird, wird eine NotSupportedException Ausnahme ausgelöst.

Sie können diese Methode erst aufrufen, nachdem Sie sich erfolgreich authentifiziert haben. Rufen Sie zum Authentifizieren eine der AuthenticateAsClientMethoden , , AuthenticateAsClientAsync, BeginAuthenticateAsClient, AuthenticateAsServer, oder AuthenticateAsServerAsyncBeginAuthenticateAsServer Methoden auf.

Gilt für: