NegotiateStream.EndRead(IAsyncResult) Methode

Definition

Beendet einen asynchronen Lesevorgang, der mit einem Aufruf von BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) gestartet wurde.Ends an asynchronous read operation that was started with a call to BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).

public:
 override int EndRead(IAsyncResult ^ asyncResult);
public override int EndRead (IAsyncResult asyncResult);
override this.EndRead : IAsyncResult -> int
Public Overrides Function EndRead (asyncResult As IAsyncResult) As Integer

Parameter

asyncResult
IAsyncResult

Eine IAsyncResult-Instanz, die durch einen Aufruf von BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) zurückgegeben wird.An IAsyncResult instance returned by a call to BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Gibt zurück

Ein Int32-Wert, der die Anzahl von Bytes angibt, die aus dem zugrunde liegenden Stream gelesen werden.A Int32 value that specifies the number of bytes read from the underlying stream.

Ausnahmen

asyncResult ist null.asyncResult is null.

asyncResult wurde nicht durch einen Aufruf von BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) erstellt.The asyncResult was not created by a call to BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).

Es ist kein ausstehender Lesevorgang vorhanden, der beendet werden muss.There is no pending read operation to complete.

- oder --or-

Es ist keine Authentifizierung erfolgt.Authentication has not occurred.

Fehler beim Lesevorgang.The read operation failed.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie ein asynchroner Lesevorgang beendet wird.The following code example demonstrates ending an asynchronous read operation. Ein Beispiel, das das Starten des Vorgangs veranschaulicht, finden Sie unter BeginRead.For an example that demonstrates starting the operation, see BeginRead.

static void EndReadCallback( IAsyncResult^ ar )
{
   
   // Get the saved data.
   ClientState^ cState = dynamic_cast<ClientState^>(ar->AsyncState);
   TcpClient^ clientRequest = cState->Client;
   NegotiateStream^ authStream = dynamic_cast<NegotiateStream^>(cState->AuthStream);
   
   // Get the buffer that stores the message sent by the client.
   int bytes = -1;
   
   // Read the client message.
   try
   {
      bytes = authStream->EndRead( ar );
      cState->Message->Append( Encoding::UTF8->GetChars( cState->Buffer, 0, bytes ) );
      if ( bytes != 0 )
      {
         authStream->BeginRead( cState->Buffer, 0, cState->Buffer->Length, gcnew AsyncCallback( EndReadCallback ), cState );
         return;
      }
   }
   catch ( Exception^ e ) 
   {
      
      // A real application should do something
      // useful here, such as logging the failure.
      Console::WriteLine( L"Client message exception:" );
      Console::WriteLine( e );
      cState->Waiter->Set();
      return;
   }

   IIdentity^ id = authStream->RemoteIdentity;
   Console::WriteLine( L"{0} says {1}", id->Name, cState->Message );
   cState->Waiter->Set();
}

public static void EndReadCallback(IAsyncResult ar)
{
    // Get the saved data.
    ClientState cState = (ClientState) ar.AsyncState;
    TcpClient clientRequest = cState.Client;
    NegotiateStream authStream = (NegotiateStream) cState.AuthenticatedStream; 
    // Get the buffer that stores the message sent by the client.
    int bytes = -1;
    // Read the client message.
    try
    {
            bytes = authStream.EndRead(ar);
            cState.Message.Append(Encoding.UTF8.GetChars(cState.Buffer, 0, bytes));
            if (bytes != 0)
            {
                 authStream.BeginRead(cState.Buffer, 0, cState.Buffer.Length, 
                       new AsyncCallback(EndReadCallback), 
                       cState);
                       return;
         }
    }
    catch (Exception e)
    {
        // A real application should do something
        // useful here, such as logging the failure.
        Console.WriteLine("Client message exception:");
        Console.WriteLine(e);
        cState.Waiter.Set();
        return;
    }
    IIdentity id = authStream.RemoteIdentity;
    Console.WriteLine("{0} says {1}", id.Name, cState.Message.ToString());
    cState.Waiter.Set();
}

Hinweise

Wenn der Vorgang nicht abgeschlossen wurde, wird diese Methode blockiert, bis dies erfolgt.If the operation has not completed, this method blocks until it does.

Verwenden Sie die Read-Methode, um diesen Vorgang synchron auszuführen.To perform this operation synchronously, use the Read method.

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 eine der Methoden AuthenticateAsClient, BeginAuthenticateAsClient, AuthenticateAsServeroder BeginAuthenticateAsServer an.To authenticate, call one of the AuthenticateAsClient, BeginAuthenticateAsClient, AuthenticateAsServer, or BeginAuthenticateAsServer methods.

Gilt für: