Export (0) Print
Expand All

SslStream.EndRead Method

Ends an asynchronous read operation started with a previous call to BeginRead.

Namespace:  System.Net.Security
Assembly:  System (in System.dll)

public override int EndRead(
	IAsyncResult asyncResult
)

Parameters

asyncResult
Type: System.IAsyncResult

An IAsyncResult instance returned by a call to BeginRead

Return Value

Type: System.Int32
A Int32 value that specifies the number of bytes read from the underlying stream.

ExceptionCondition
ArgumentNullException

asyncResult is null.

ArgumentException

asyncResult was not created by a call to BeginRead.

InvalidOperationException

There is no pending read operation to complete.

IOException

The read operation failed.

InvalidOperationException

Authentication has not occurred.

If the operation has not completed, this method blocks until it does.

To perform this operation synchronously, use the Read method.

You cannot call this method until you have successfully authenticated. To authenticate call one of the AuthenticateAsClient, or BeginAuthenticateAsClient, AuthenticateAsServer, BeginAuthenticateAsServer methods.

The following code example demonstrates ending an asynchronous read operation.

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;
}
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 = dynamic_cast<SslStream*> (ar->AsyncState);
    int byteCount = -1;
    try 
    {
        Console::WriteLine(S"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(S"<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(S"Message from the server: {0}", readData);
        }
    }
    catch (Exception* readException)
    {
        e = readException;
        complete = true;
        return;
    }
    complete = true;
}

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0

Community Additions

ADD
Show:
© 2014 Microsoft