gpt4 book ai didi

c# - 从 SslStream 读取内容

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:48 24 4
gpt4 key购买 nike

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

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

问题:

  • 无法从流中读取完整的输出内容
  • whileSslStream.Read 上循环似乎不起作用
  • StreamReader.ReadLineReadToEndRead 方法不起作用

示例代码:

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 协议(protocol)中所述。

但是,IMAP 似乎旨在在后台线程上连续读取,因为服务器可以随时向您发送信息。因此,您可能应该有一个始终位于 ReadLine() 中的单独线程。

关于c# - 从 SslStream 读取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7743659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com