从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;
}
帮助:
- 我如何从流中读取命令的完整输出?
注意:我不想使用任何第三方库
TCP流无法知道当前响应是否已经完成。它所知道的是,它是否刚刚收到了电线上的数据;它不知道下一个数据包是马上到达(一个多数据包响应)还是很晚才到达(如果响应已经完成)。
相反,你需要预测什么时候你会得到更多的数据;您应该继续阅读,直到收到标记的完成响应,正如IMAP协议中所记录的那样。
然而,IMAP似乎打算在后台线程上连续读取,因为服务器可以随时向您发送信息。因此,您可能应该在ReadLine()
中设置一个单独的线程。