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


SslStream.Read(Byte[], Int32, Int32) Метод

Определение

Считывает данные из этого потока и сохраняет их в заданном массиве.

public:
 override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer

Параметры

buffer
Byte[]

Массив элементов Byte, куда помещаются байты, считанные из этого потока.

offset
Int32

Значение Int32, содержащее расположение (начиная с нуля) в массиве buffer, с которого следует начинать сохранение данных, считанных их этого потока.

count
Int32

Значение Int32, содержащий максимальное количество байтов, считываемых из этого потока.

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

Значение Int32, указывающее количество считанных байтов. Когда данных для чтения не остается, возвращает 0.

Исключения

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

Значение параметра offset меньше нуля.

-или-

Значение offset превышает длину buffer.

-или-

Сумма значений offset и count превышает длину массива buffer.

Сбой операции чтения. Проверьте внутреннее исключение, если такое присутствует, чтобы определить причину сбоя.

Уже существует выполняющаяся операция чтения.

Объект закрыт.

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

Примеры

В следующем примере кода демонстрируется чтение из SslStream.

private:
    static String^ ReadMessage(SslStream^ sslStream)
    {
          
        // Read the  message sent by the server.
        // The end of the message is signaled using the
        // "<EOF>" marker.
        array<Byte>^ buffer = gcnew array<Byte>(2048);
        StringBuilder^ messageData = gcnew StringBuilder;
        // Use Decoder class to convert from bytes to UTF8
        // in case a character spans two buffers.
        Encoding^ u8 = Encoding::UTF8;
        Decoder^ decoder = u8->GetDecoder();

        int bytes = -1;
        do
        {
            bytes = sslStream->Read(buffer, 0, buffer->Length);
             
            array<__wchar_t>^ chars = gcnew array<__wchar_t>(
                decoder->GetCharCount(buffer, 0, bytes));
            decoder->GetChars(buffer, 0, bytes, chars, 0);
            messageData->Append(chars);
             
            // Check for EOF.
            if (messageData->ToString()->IndexOf("<EOF>") != -1)
            {
                break;
            }
        }
        while (bytes != 0);

        return messageData->ToString();
    }
static string ReadMessage(SslStream sslStream)
{
    // Read the  message sent by the server.
    // The end of the message is signaled using the
    // "<EOF>" marker.
    byte [] buffer = new byte[2048];
    StringBuilder messageData = new StringBuilder();
    int bytes = -1;
    do
    {
        bytes = sslStream.Read(buffer, 0, buffer.Length);

        // 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,bytes)];
        decoder.GetChars(buffer, 0, bytes, chars,0);
        messageData.Append (chars);
        // Check for EOF.
        if (messageData.ToString().IndexOf("<EOF>") != -1)
        {
            break;
        }
    } while (bytes != 0);

    return messageData.ToString();
}
Private Shared Function ReadMessage(sslStream As SslStream) As String

    ' Read the  message sent by the server.
    ' The end of the message is signaled using the "<EOF>" marker.
    Dim buffer = New Byte(2048) {}
    Dim messageData = New StringBuilder()
    Dim bytes As Integer

    Do
        bytes = sslStream.Read(buffer, 0, buffer.Length)

        ' 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, bytes) - 1) {}
        decoder.GetChars(buffer, 0, bytes, chars, 0)
        messageData.Append(chars)

        ' Check for EOF.
        If messageData.ToString().IndexOf("<EOF>") <> -1 Then Exit Do
        
    Loop While bytes <> 0

    Return messageData.ToString()

End Function

Комментарии

Метод считывает максимум count байтов из потока и сохраняет их в buffer , начиная с offset. Невозможно выполнить несколько одновременных операций чтения.

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

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

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