首先,为什么我编写Telnet客户端并不重要。这是我的工作,我必须这样做。所以,关于我的问题......
我的Telnet客户端很简单,允许交互式通信(由人使用)以及自动通信(由程序使用)。但是,为了让我的客户端知道服务器何时完成发送数据以便将控制权交还给用户,我必须将给定服务器的所有可能命令提示硬编码到客户端应用程序中。例如,我创建一个提示列表,然后将此列表传递给客户端,以便它可以在服务器的数据流中查看这些提示。当它看到数据流以一个结尾时,它然后将控制权交还给用户,用户将输入响应或命令并发送它。然后客户端再次观察这些提示中的任何一个等等。对于在CentOS上运行的Telnet服务器,该列表可能如下所示:
private static void SetTerminalPrompts()
{
prompts.Add("login: ");
prompts.Add("Password: ");
prompts.Add("]$ ");
prompts.Add("]# ");
}
这将用作:
response = telnetClient.ReceiveUntilPrompt(prompts);
而public string ReceiveUntilPrompt(List<string> prompts)
只是从列表中读取观察提示的数据流。
问题在于注意这些提示。在一般情况下,Telnet客户端将不知道它所连接的服务器。尝试通过猜测客户端可能连接的所有服务器来尝试创建完整的可能提示列表似乎很愚蠢(尽管我发现了几个例子和帖子就是这样)。 / p>
我想知道的是,Windows或Linux附带的Telnet客户端如何知道何时将控制权交还给用户?他们如何知道Telnet服务器何时完成发送数据?