Прочитать на английском

Поделиться через


SslStream.EndRead(IAsyncResult) Метод

Определение

Заканчивает асинхронную операцию чтения, запущенную до этого вызовом метода BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).

C#
public override int EndRead(IAsyncResult asyncResult);

Параметры

asyncResult
IAsyncResult

Экземпляр IAsyncResult, возвращенный вызовом метода BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).

Возвращаемое значение

Значение Int32, указывающее количество байтов, считанное из базового потока.

Исключения

asyncResult имеет значение null.

Параметр asyncResult не был создан вызовом метода BeginRead(Byte[], Int32, Int32, AsyncCallback, Object).

Нет ожидающей завершения операции чтения.

-или-

Проверка подлинности не выполнялась.

Сбой операции чтения.

Примеры

В следующем примере кода показано завершение асинхронной операции чтения.

C#

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;
}

Комментарии

Если операция не завершена, этот метод блокируется до тех пор, пока не завершится.

Чтобы выполнить эту операцию синхронно, используйте Read метод .

Вы не сможете вызвать этот метод, пока не пройдете проверку подлинности. Для проверки подлинности AuthenticateAsClientвызовите один из методов , или BeginAuthenticateAsClient, AuthenticateAsServer. BeginAuthenticateAsServer

Применяется к

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1