SslStream.Read(Byte[], Int32, Int32) Méthode

Définition

Lit les données de ce flux et les stocke dans le tableau spécifié.

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

Paramètres

buffer
Byte[]

Tableau Byte qui reçoit les octets lus dans ce flux.

offset
Int32

Int32 contenant l'emplacement de base zéro dans buffer, à partir duquel commencer l'enregistrement des données lues dans ce flux.

count
Int32

Int32 contenant le nombre maximal d'octets à lire dans ce flux.

Retours

Int32

Valeur Int32 qui indique le nombre d'octets lus. Lorsqu'il n'y a plus de données à lire, retourne 0.

Exceptions

buffer a la valeur null.

offset est inférieur à zéro.

  • ou -

offset est supérieur à la longueur de buffer.

  • ou -

offset + count est supérieur à la longueur de buffer.

L'opération de lecture a échoué. Vérifiez l'exception interne, si elle permet de déterminer la cause de la défaillance.

Une opération de lecture est déjà en cours.

L’objet a été fermé.

L'authentification n'a pas été effectuée.

Exemples

L’exemple de code suivant illustre la lecture à partir d’un 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

Remarques

La méthode lit un maximum d’octets count à partir du flux et les stocke en buffer commençant par offset. Vous ne pouvez pas effectuer plusieurs opérations de lecture simultanées.

Vous ne pouvez pas appeler cette méthode tant que vous n’avez pas réussi à vous authentifier. Pour authentifier l’appel de l’une AuthenticateAsClientdes méthodes , ou BeginAuthenticateAsClient, AuthenticateAsServerBeginAuthenticateAsServer

Pour effectuer cette opération de manière asynchrone, utilisez la BeginRead méthode.

S’applique à