【发布时间】: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 不,我的命令中没有奇怪的字符