Teilen über


SslStream.Read(Byte[], Int32, Int32) Methode

Definition

Liest Daten aus diesem Stream und speichert sie im angegebenen Array.

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

Parameter

buffer
Byte[]

Ein Byte-Array, das die Bytes empfängt, die aus diesem Stream gelesen werden.

offset
Int32

Ein Int32-Typ, der den nullbasierten Speicherort im buffer enthält, ab dem die aus diesem Stream gelesenen Daten gespeichert werden.

count
Int32

Ein Int32, das die maximale Anzahl der aus diesem Stream gelesenen Bytes enthält.

Gibt zurück

Ein Int32-Wert, der die Anzahl der gelesenen Bytes angibt. Gibt 0 (null) zurück, wenn keine weiteren zu lesenden Daten vorhanden sind.

Ausnahmen

buffer ist null.

offset ist kleiner als Null.

- oder -

offset ist größer als die Länge von buffer.

- oder -

offset plus „count“ ist größer als die Länge von buffer.

Fehler beim Lesevorgang. Überprüfen Sie die innere Ausnahme, sofern vorhanden, um die Ursache des Fehlers zu bestimmen.

Es wird bereits ein Lesevorgang ausgeführt.

Dieses Objekt wurde geschlossen.

Es ist keine Authentifizierung erfolgt.

Beispiele

Im folgenden Codebeispiel wird das Lesen aus einem SslStreamveranschaulicht.

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

Hinweise

Die -Methode liest maximal count Bytes aus dem Stream und speichert sie am buffer Anfang unter offset. Sie können nicht mehrere gleichzeitige Lesevorgänge ausführen.

Sie können diese Methode erst aufrufen, wenn Sie sich erfolgreich authentifiziert haben. Rufen Sie zum Authentifizieren eine der AuthenticateAsClientMethoden , oder BeginAuthenticateAsClient, AuthenticateAsServerauf BeginAuthenticateAsServer .

Verwenden Sie die BeginRead -Methode, um diesen Vorgang asynchron auszuführen.

Gilt für: