SslStream.EndRead(IAsyncResult) Methode

Definition

Beendet einen asynchronen Lesevorgang, der mit einem vorherigen Aufruf von 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 von einem Aufruf von BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).

Gibt zurück

Ein Int32 Wert, der die Anzahl der aus dem zugrunde liegenden Datenstrom gelesenen Bytes angibt.

Ausnahmen

asyncResult ist null.

asyncResult wurde nicht durch einen Aufruf BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)von .

Es ist kein ausstehender Lesevorgang vorhanden, der abgeschlossen werden soll.

-oder-

Die Authentifizierung ist nicht aufgetreten.

Fehler beim Lesevorgang.

Beispiele

Im folgenden Codebeispiel wird das Beenden eines asynchronen Lesevorgangs veranschaulicht.


static void ReadCallback(IAsyncResult ar)
{
    // Read the  message sent by the server.
    // The end of the message is signaled using the
    // "<EOF>" marker.
    SslStream stream = (SslStream) ar.AsyncState;
    int byteCount = -1;
    try
    {
        Console.WriteLine("Reading data from the server.");
        byteCount = stream.EndRead(ar);
        // Use Decoder class to convert from bytes to UTF8
        // in case a character spans two buffers.
        Decoder decoder = Encoding.UTF8.GetDecoder();
        char[] chars = new char[decoder.GetCharCount(buffer,0, byteCount)];
        decoder.GetChars(buffer, 0, byteCount, chars,0);
        readData.Append (chars);
        // Check for EOF or an empty message.
        if (readData.ToString().IndexOf("<EOF>") == -1 && byteCount != 0)
        {
            // We are not finished reading.
            // Asynchronously read more message data from  the server.
            stream.BeginRead(buffer, 0, buffer.Length,
                new AsyncCallback(ReadCallback),
                stream);
        }
        else
        {
            Console.WriteLine("Message from the server: {0}", readData.ToString());
        }
    }
    catch (Exception readException)
    {
        e = readException;
        complete = true;
        return;
    }
    complete = true;
}

Shared Sub ReadCallback(ar As IAsyncResult)
    ' Read the  message sent by the server.
    ' The end of the message is signaled using the
    ' "<EOF>" marker.
    Dim stream = CType(ar.AsyncState, SslStream)
    Dim byteCount As Integer
    Try
        Console.WriteLine("Reading data from the server.")
        byteCount = stream.EndRead(ar)
        ' Use Decoder class to convert from bytes to UTF8
        ' in case a character spans two buffers.
        Dim decoder As Decoder = Encoding.UTF8.GetDecoder()
        Dim chars = New Char(decoder.GetCharCount(buffer, 0, byteCount)) {}
        decoder.GetChars(buffer, 0, byteCount, chars, 0)
        readData.Append(chars)
        ' Check for EOF or an empty message.
        If readData.ToString().IndexOf("<EOF>") = -1 AndAlso byteCount <> 0 Then
            ' We are not finished reading.
            ' Asynchronously read more message data from  the server.
            stream.BeginRead(buffer, 0, buffer.Length, New AsyncCallback(AddressOf ReadCallback), stream)
        Else
            Console.WriteLine("Message from the server: {0}", readData.ToString())
        End If
    Catch readException As Exception
        e = readException
        complete = True
        Return
    End Try
    complete = True
End Sub

Hinweise

Wenn der Vorgang nicht abgeschlossen ist, wird diese Methode blockiert, bis er ausgeführt wird.

Verwenden Sie die Read Methode, um diesen Vorgang synchron auszuführen.

Sie können diese Methode erst aufrufen, nachdem Sie sich erfolgreich authentifiziert haben. Zum Authentifizieren rufen Sie eine der AuthenticateAsClientMethoden oder Methoden oder BeginAuthenticateAsClientMethoden AuthenticateAsServerBeginAuthenticateAsServer auf.

Gilt für: