【发布时间】:2020-12-15 16:19:50
【问题描述】:
我一直在浏览有关我所关心的问题的答案,但我找不到具体的答案,或者至少找不到关于从 Telnet 连接获得响应的清晰想法。这是我的代码:
TcpClient vpnMI = new TcpClient("127.0.0.1", 7505);
String message = "hold release\n";
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
NetworkStream stream = vpnMI.GetStream();
stream.Write(data, 0, data.Length);
Console.WriteLine("Sent {0}", message);
data = new Byte[256];
MemoryStream memoryStream = new MemoryStream();
String responseData = String.Empty;
Int32 bytes = 0;
do
{
bytes = stream.Read(data, 0, data.Length);
memoryStream.Write(data, 0, bytes);
}
while (stream.DataAvailable);
responseData = System.Text.Encoding.ASCII.GetString(memoryStream.ToArray());
Console.WriteLine("Received: {0}", responseData);
// Close everything.
stream.Close();
vpnMI.Close();
但我只能在发送“保持释放”之前得到响应,即使之后有响应。 提前感谢您的回复。
【问题讨论】:
-
感谢您的回复@TheGeneral,但您的意思是永远?是因为
stream.DataAvailable吗? -
如果服务器发送大量数据
DataAvailable将永远为真。 Telnet 客户端不能那样工作。过去,他们会立即将从服务器接收到的每个字节发送到控制台。更聪明的方法是逐行读取输出。您可以为此使用 StreamReader。您可以使用StreamWriter写入服务器而无需将字符串显式转换为字节 -
谢谢@PanagiotisKanavos 我在这方面还是不太擅长,所以如何逐行读取输出?我应该设置一个循环来检查该行是否为 != none?