【问题标题】:C# Telnet client give none/incomplete outputC# Telnet 客户端不提供/不完整的输出
【发布时间】:2019-07-20 00:28:28
【问题描述】:

我对 C# 中 telnet 客户端的基本实现有疑问。当我尝试通过命令行(telnet 192.168.0.255 23)连接到本地网络中的远程计算机时,没有问题,但是使用此代码,我无法获得任何逻辑输出
(只是字符“??%?? ?? ??'??¬?? ??”)。

TcpClient telnetClient = new TcpClient("192.168.0.255", 23);
NetworkStream telnetStream = telnetClient.GetStream();
byte[] data = new Byte[4];
string responseData = String.Empty;
int bytes = telnetStream.Read(data, 0, data.Length);
while (true){
   responseData += Encoding.ASCII.GetString(data, 0, bytes);
   bytes = telnetStream.Read(data, 0, data.Length);
   if (!telnetStream.DataAvailable)
      break;
}
Console.WriteLine(responseData);
telnetClient.Close();

我意识到,当我尝试从不同的公共服务器(例如 telehack.com)获取输出时,在某些情况下我只得到第一行输出。但是通过命令行提供的输出要广泛得多。

Telnet connection to remote pc in LAN via telnet and c#
Connection to public pc via telnet and c#

你能告诉我我做错了什么吗? :) 谢谢大家的帮助。

【问题讨论】:

  • 尝试使用不同的编码,而不是ASCII
  • 我已经尝试了 Encoding 类中所有可用的算法,但没有任何反应。

标签: c# telnet


【解决方案1】:

在 telehack.com 的情况下,通过 Telnet 发送的第一个字节是命令字节(请参阅 https://en.wikipedia.org/wiki/Telnet#Telnet_data )。它们以 0xFF 开头,然后是命令。您可以在下面的示例中的调试窗口中清楚地看到它们(数字为十进制)。

我用你的(扩展的)C# 脚本尝试了这个:

【讨论】:

  • 是的。谢谢你。调试后我意识到将睡眠放入while循环。没有睡眠,我只是得到部分输出。
  • 哦,是的,我完全忘记了这一点。没有睡眠它在很大程度上取决于网络速度等。您还可以将重复的 Read 语句重构为循环和 while 循环中的 if 语句(作为 while 条件),以获得更简洁的代码。
猜你喜欢
  • 2013-01-28
  • 2014-11-19
  • 2021-09-01
  • 1970-01-01
  • 2011-04-30
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多