SslStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Método

Definición

Inicia una operación de lectura asincrónica que lee los datos de la secuencia y los almacena en la matriz especificada.

C#
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback? asyncCallback, object? asyncState);
C#
public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback asyncCallback, object asyncState);

Parámetros

buffer
Byte[]

Matriz Byte que recibe los bytes leídos de la secuencia.

offset
Int32

Posición de base cero de buffer donde se comienzan a almacenar los datos leídos de esta secuencia.

count
Int32

Número máximo de bytes que se van a leer de la secuencia.

asyncCallback
AsyncCallback

Delegado de AsyncCallback que hace referencia al método que se va a invocar una vez finalizada la operación de lectura.

asyncState
Object

Objeto definido por el usuario que contiene información sobre la operación de lectura. Este objeto se pasa al delegado de asyncCallback cuando la operación ha terminado.

Devoluciones

Un objeto IAsyncResult que indica el estado de la operación asincrónica.

Excepciones

buffer es null.

offset es menor que cero.

O bien

offset es mayor que la longitud de buffer.

O bien

La suma de offset y el recuento es mayor que la longitud de buffer.

Se ha producido un error en la operación de lectura.

O bien

El cifrado está en uso, pero los datos no se pudieron descifrar.

Ya hay una operación de lectura en curso.

Este objeto se ha cerrado.

No se ha producido la autenticación.

Ejemplos

En el ejemplo de código siguiente se muestra cómo iniciar una operación de lectura asincrónica.

C#
// readData and buffer holds the data read from the server.
// They is used by the ReadCallback method.
static StringBuilder readData = new StringBuilder();
static byte [] buffer = new byte[2048];
C#
static void WriteCallback(IAsyncResult ar)
{
    SslStream stream = (SslStream) ar.AsyncState;
    try
    {
        Console.WriteLine("Writing data to the server.");
        stream.EndWrite(ar);
        // Asynchronously read a message from the server.
        stream.BeginRead(buffer, 0, buffer.Length,
            new AsyncCallback(ReadCallback),
            stream);
    }
    catch (Exception writeException)
    {
        e = writeException;
        complete = true;
        return;
    }
}

Se llama al método siguiente cuando se completa la lectura.

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

Comentarios

Si el cifrado y la firma están habilitados, la operación de lectura lee los datos de la secuencia subyacente, comprueba la integridad de los datos o lo descifra. La operación de lectura asincrónica debe completarse llamando al EndRead método . Normalmente, el delegado invoca el asyncCallback método .

Este método no se bloquea mientras se completa la operación. Para bloquear hasta que finalice la operación, use el Read método .

Para obtener información detallada sobre el uso del modelo de programación asincrónica, vea Llamar a métodos sincrónicos de forma asincrónica.

La SslStream clase no admite varias operaciones de lectura simultáneas.

No puede llamar a este método hasta que se haya autenticado correctamente. Para autenticar una de las llamadas a uno de los AuthenticateAsClientmétodos , o BeginAuthenticateAsClient, AuthenticateAsServer. BeginAuthenticateAsServer

Se aplica a

Producto Versiones
.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