2014-03-24 59 views
0

我正在使用Telnet协议来查询UNIX服务器并获取某些命令的输出。我现在用的是Minimalistic telnet from code project和我做了轻微的修改,以使阅读输出到流的末尾:从StreamReader读取未达到结束 - 使用Telnet协议

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()永远不会到达。

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

+1

难道是你的流中有一些奇怪的字符,并且读取的行不正确吗? – Marko

+4

Telnet连接不像HTTP;连接保持打开状态。你期望什么来表明流的结束?你是否终止了连接? – itsme86

+0

不,我想终止命令,但是我想让连接保持打开状态 –

回答

1

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