none
sslStream ERRO READ() RRS feed

  • Pergunta

  • olá pessoal, 

    utilizando o sslTream para conectar a um servidor imap, o server me retorno a mensagem de * Ok the Gimap server is ready....

    mas só eu fizer uma gambi denrto do loop de leituro

    aqui esta ele 

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

    durante a primeira leitura ele me retorno a mensagem e na comparação de fim de arquivo ele retorna false, logo ele volta pro loop, e ao tentar fazer a leitura o programa trava, sei que é pelo de não ter mensagen, mas como posso resolver este problema ?

    o método foi retirado de :

    http://msdn.microsoft.com/en-us/library/system.net.security.sslstream.read.aspx

    quarta-feira, 1 de agosto de 2012 15:55

Todas as Respostas

  • Também tentei da seguinte maneira

    while (netStream.CanRead)
                    {
                        bytestoread = netStream.Read(reader, 0, reader.Length);
                        resposta.AppendFormat("{0}", Encoding.UTF8.GetString(reader, 0, bytestoread));
                    }

    na primeira leitura, ele consegue ler a mensagem, porem quando volta para a condição do loop,  ela ainda é verdadeira, apesar de não ter mais dados a serem lidos, e tenta a leitura novamente, mas como não tem nenhum dado, ele da pau.

    alguma solução ?


    quarta-feira, 1 de agosto de 2012 16:33
  • Ope pessoal, consegui ler a resposta da seguinte maneira,

    usei um StreamReader e inicializei ele com o sslStream,

    deu certo, ele entende que não há mais respostas,

    agora uma duvida para enviar mensagens ao servidor, envio com o próprio sslStream ou uso um StreamWriter inicializado com o sslStream?

    quinta-feira, 2 de agosto de 2012 13:37
  • agora uma duvida para enviar mensagens ao servidor, envio com o próprio sslStream ou uso um StreamWriter inicializado com o sslStream?

    O que for mais fácil para você. Se o StreamWriter vai ser inicializado com o sslStream, significa que o StreamWriter vai escrever no sslStream e funcionar apenas como um "proxy", com a vantagem de ser mais simples para escrever texto (ao invés de escrever bytes).

    Abraços,
    Caio Proiete

     


    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    quarta-feira, 8 de agosto de 2012 18:57
    Moderador