SslStream.ReadByte () блокирует поток? - PullRequest
0 голосов
/ 13 июня 2010

Я пытаюсь написать клиент Imap4.
Для этого я использую SslStream для подключения к серверу.
Все нормально, пока я не отправлю команду "Логин".
Когда я пытаюсь получитьОтвет на него, SslStream.ReadByte () блокирует поток.
В результате моя программа всегда падает.
Что здесь происходит ??

Код:

if (ssl)
{
     s = stream;
}</p>

<code>        int cc = 0;
        MessageBox.Show("entered");
        while (true)
        {
            int xs = s.ReadByte();
            MessageBox.Show(xs.ToString());
            if (xs > 0)
            {
                buf.Add((byte)xs);
                cc++;

                if (xs == '\n')
                {
                    break;
                }
                if (cc > 10)
                    MessageBox.Show(en.GetString(buf.ToArray()));
            }
            else
            {
                break;
            }
        }
        MessageBox.Show("left");
</code>

1 Ответ

4 голосов
/ 13 июня 2010

Да, Stream.ReadByte() будет блокироваться до тех пор:

  • Поток закрыт (в этом случае возвращается -1)
  • Данные получены в потоке, в которомв случае, если будет возвращен следующий байт

Итак, предположительно, сервер, к которому вы подключаетесь, не отправляет никаких данных ... он вполне может ожидать от вас дополнительных данных.Насколько вы уверены, что ваша команда входа в систему отправляется правильно?Вы очистили поток, на котором пишете?Отправили какие-либо разделители или ограничители строки, которые требуются?

...