【问题标题】:Read from StreamReader doesn't reach the end - Using Telnet protocol从 StreamReader 读取没有到达终点 - 使用 Telnet 协议
【发布时间】:2015-07-21 01:10:59
【问题描述】:

我使用 Telnet 协议来查询 UNIX 服务器并获取一些命令的输出。我正在使用Minimalistic telnet from code project,并进行了一些修改以启用将输出读取到流的末尾:

public void WriteCommand(string cmd)
{
    using (NetworkStream stream = tcpSocket.GetStream())
    {
        using (StreamWriter writer = new StreamWriter(stream))
        {
            writer.AutoFlush = true;

            using (StreamReader reader = new StreamReader(stream))
            {
                 string message = cmd;
                 writer.WriteLine(message);
                 writer.Flush();

                 while (!reader.EndOfStream)
                 {
                     string response = reader.ReadLine();
                     Console.WriteLine(response);
                 }
             }
         }
     }
 }

问题是,当我运行这个应该返回输出直到结束的方法时,它被阻塞了,因为它没有识别流的结尾,所以条件reader.EndOfStream() 永远不会达到。

你能告诉我我的代码有什么问题吗?

【问题讨论】:

  • 可能是您的流中有一些奇怪的字符并且读取行没有正确读取它?
  • Telnet 连接不像 HTTP;连接保持打开状态。您期望什么指示流的结束?您要终止连接吗?
  • 不,我想终止命令,但我希望连接保持打开状态
  • 正如@itsme86 建议的那样,您可能没有到达流的末尾。您的tcpSocket 在其他地方声明,所以我猜这是您保持打开的连接。如果连接仍然打开,则您还没有到达网络流的末尾!
  • @Marko 不,我的命令中没有奇怪的字符

标签: c# telnet


【解决方案1】:

正如@itsme86 所写,连接保持打开状态。您是否期望正在发送的命令有任何响应?如果为真,则读取响应,解析它,找到一些分隔符或其他结束符号,这些符号将标记该命令已成功执行并破坏您的 while()。

【讨论】:

    猜你喜欢
    • 2014-01-14
    • 2010-11-01
    • 2021-07-27
    • 2016-02-23
    • 2011-11-26
    • 2016-01-27
    • 1970-01-01
    • 2019-09-10
    • 2021-05-13
    相关资源
    最近更新 更多