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

Definition

Startet einen asynchronen Lesevorgang, der Daten aus dem Stream liest und im angegebenen Array speichert.Begins an asynchronous read operation that reads data from the stream and stores it in the specified array.

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);
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult

Parameter

buffer
Byte[]

Ein Byte-Array, das die Bytes empfängt, die aus dem Stream gelesen werden.A Byte array that receives the bytes read from the stream.

offset
Int32

Der nullbasierte Speicherort im buffer, ab dem die aus diesem Stream gelesenen Daten gespeichert werden.The zero-based location in buffer at which to begin storing the data read from this stream.

count
Int32

Die maximale Anzahl an Bytes, die aus dem Stream gelesen werden sollen.The maximum number of bytes to read from the stream.

asyncCallback
AsyncCallback

Ein AsyncCallback-Delegat, der auf die Methode verweist, die aufgerufen wird, wenn der Lesevorgang beendet ist.An AsyncCallback delegate that references the method to invoke when the read operation is complete.

asyncState
Object

Ein benutzerdefiniertes Objekt, das Informationen zum Lesevorgang enthält.A user-defined object containing information about the read operation. Dieses Objekt wird bei Abschluss des Vorgangs an den asyncCallback-Delegaten übergeben.This object is passed to the asyncCallback delegate when the operation completes.

Gibt zurück

Ein IAsyncResult-Objekt, das den Status des asynchronen Vorgangs angibt.An IAsyncResult object indicating the status of the asynchronous operation.

Ausnahmen

buffer ist null.buffer is null.

offset ist kleiner als 0.offset is less than 0.

- oder --or- offset ist größer als die Länge von buffer.offset is greater than the length of buffer.

- oder --or- offset plus count ist größer als die Länge von buffer.offset plus count is greater than the length of buffer.

Fehler beim Lesevorgang.The read operation failed.

- oder --or-

Die Verschlüsselung wird verwendet, die Daten konnten jedoch nicht entschlüsselt werden.Encryption is in use, but the data could not be decrypted.

Es wird bereits ein Lesevorgang ausgeführt.There is already a read operation in progress.

Dieses Objekt wurde geschlossen.This object has been closed.

Es ist keine Authentifizierung erfolgt.Authentication has not occurred.

Beispiele

Im folgenden Codebeispiel wird das Starten eines asynchronen Lesevorgangs veranschaulicht.The following code example demonstrates starting an asynchronous read operation. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die NegotiateStream -Klasse bereitgestellt wird.This code example is part of a larger example provided for the NegotiateStream class.

static void AuthenticateClient( TcpClient^ clientRequest )
{
   NetworkStream^ stream = clientRequest->GetStream();
   
   // Create the NegotiateStream.
   NegotiateStream^ authStream = gcnew NegotiateStream( stream,false );
   
   // Save the current client and NegotiateStream instance 
   // in a ClientState object.
   ClientState^ cState = gcnew ClientState( authStream,clientRequest );
   
   // Listen for the client authentication request.
   authStream->BeginAuthenticateAsServer( gcnew AsyncCallback( EndAuthenticateCallback ), cState );
   
   // Wait until the authentication completes.
   cState->Waiter->WaitOne();
   cState->Waiter->Reset();
   authStream->BeginRead( cState->Buffer, 0, cState->Buffer->Length, gcnew AsyncCallback( EndReadCallback ), cState );
   cState->Waiter->WaitOne();
   
   // Finished with the current client.
   authStream->Close();
   clientRequest->Close();
}


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.
    authStream.BeginAuthenticateAsServer (
        new AsyncCallback(EndAuthenticateCallback),
        cState
        );
    // Wait until the authentication completes.
    cState.Waiter.WaitOne();
    cState.Waiter.Reset();
    authStream.BeginRead(cState.Buffer, 0, cState.Buffer.Length, 
           new AsyncCallback(EndReadCallback), 
           cState);
    cState.Waiter.WaitOne();
    // Finished with the current client.
    authStream.Close();
    clientRequest.Close();
}

Hinweise

Wenn Verschlüsselung, Signierung oder Verschlüsselung und Signierung aktiviert ist, liest der Lesevorgang die Daten aus dem zugrunde liegenden Stream, überprüft die Integrität der Daten und entschlüsselt sie.If encryption, signing, or encryption and signing are enabled, the read operation reads the data from the underlying stream, checks the integrity of the data, and decrypts it. Wenn keine Sicherheitsdienste wie Datenverschlüsselung oder Signierung verwendet werden, startet diese Methode einen asynchronen Lesevorgang für den zugrunde liegenden Stream.If no security services such as data encryption or signing are in use, this method starts an asynchronous read operation on the underlying stream.

Diese Methode ist asynchron und wird nicht blockiert, während der Vorgang abgeschlossen wird.This method is asynchronous and does not block while the operation completes. Um zu blockieren, bis der Vorgang abgeschlossen ist Read , verwenden Sie die-Methode.To block until the operation completes, use the Read method.

Der asynchrone Lesevorgang muss durch Aufrufen der EndRead -Methode abgeschlossen werden.The asynchronous read operation must be completed by calling the EndRead method. In der Regel wird die-Methode vom asyncCallback -Delegaten aufgerufen.Typically, the method is invoked by the asyncCallback delegate. Ausführliche Informationen zur Verwendung des asynchronen Programmiermodells finden Sie unter Asynchrones Aufrufen synchroner Methoden .For detailed information about using the asynchronous programming model, see Calling Synchronous Methods Asynchronously

Die NegotiateStream -Klasse unterstützt nicht mehrere gleichzeitige Lesevorgänge.The NegotiateStream class does not support multiple simultaneous read operations. Wenn Sie versuchen, einen Lesevorgang zu starten, während ein anderer Lesevorgang bereits im gleichen Stream ausgeführt wird NotSupportedException , wird eine-Ausnahme ausgelöst.If you attempt to start a read operation while another read operation is already executing on the same stream, a NotSupportedException exception will be thrown.

Diese Methode kann erst aufgerufen werden, nachdem Sie sich erfolgreich authentifiziert haben.You cannot call this method until you have successfully authenticated. Um sich zu authentifizieren, wenden Sie AuthenticateAsClienteine BeginAuthenticateAsClientder AuthenticateAsServerMethoden, BeginAuthenticateAsServer , oder an.To authenticate, call one of the AuthenticateAsClient, BeginAuthenticateAsClient, AuthenticateAsServer, or BeginAuthenticateAsServer methods.

Gilt für: