从SslStream读取内容

本文关键字:读取 SslStream | 更新日期: 2023-09-27 18:11:00

我有一个应用程序,我使用它执行IMAP命令:

  • TcpClient连接IMAP服务器
  • SslStream写入和读取命令

问题:

  • 无法从流中读取完整的输出内容
  • while环对SslStream.Read似乎不工作
  • StreamReader.ReadLine, ReadToEnd, Read方法不工作

示例代码:

while ((l = reader.ReadLine()) != null)
{
    output.AppendLine(l);
}

这个代码片段读1到2行,挂在reader.Readline()中。

我尝试设置ReadTimeout属性:
try
{
    _output=new byte[_tcpclient.ReceiveBufferSize];
    _sslstream.Read(_output, 0, _output.Length);
    textBox1.Text = Encoding.ASCII.GetString(_output);
}
catch (IOException ex)
{
    textBox1.Text ="ERROR !! " + ex.Message;                
}

帮助:

  • 我如何从流中读取命令的完整输出?

注意:我不想使用任何第三方库

从SslStream读取内容

TCP流无法知道当前响应是否已经完成。它所知道的是,它是否刚刚收到了电线上的数据;它不知道下一个数据包是马上到达(一个多数据包响应)还是很晚才到达(如果响应已经完成)。

相反,你需要预测什么时候你会得到更多的数据;您应该继续阅读,直到收到标记的完成响应,正如IMAP协议中所记录的那样。

然而,IMAP似乎打算在后台线程上连续读取,因为服务器可以随时向您发送信息。因此,您可能应该在ReadLine()中设置一个单独的线程。