c-如何在telnet客户端实现tab完成



我有一个服务器,它为telnet客户端打开连接,比如例如:我运行服务器CCD_ 1,在另一个窗口中,当我运行telnet客户端时,我将以CLI>>的形式得到新的CLI提示。

根据这个提示,我需要自定义选项卡完成,但许多博客说,我们真的不能在telnet端实现readline功能,如果这样的话,我们必须使用自己的客户端。

我该如何实现它?如有任何相关帮助,我们将不胜感激。我使用的是linux(Ubuntu)和C语言。

您必须将telnet客户端置于char模式,这样它在键入每个密钥时会直接将其发送到服务器(而不是等待返回密钥发送完整的一行)。然后,每当您收到"\t"时,请检查您在该"\t"之前收到的内容,并根据您是否能完成该行,发回完整的行或可能性列表。基本上,您在服务器中实现readline()。

您可以在客户端或服务器上实现此功能。

对于客户端实现,有两种方式(基本相同):

  1. 当客户端连接时,服务器会发送一个命令及其参数的列表,并将其缓存在客户端中。当用户按下TAB键时,客户端将搜索该缓存数据。

  2. 当客户端注意到TAB键被按下时,它会向服务器询问可能完成的列表。为了提高速度,这个列表应该缓存在客户端。

所以这里的基本解决方案是:服务器向客户端发送数据,客户端显示数据。


对于服务器端实现,您必须使用telnet协商来告诉客户端在不干扰服务器的情况下发送原始的未混合字符和密钥。然后服务器可以检查TAB键并执行完成。

这里的问题是,然后你必须在服务器代码中添加所有的命令行编辑和提示,并且不能依赖客户端成为"愚蠢的终端"。


在服务器端完成所有处理的好处是,您几乎可以使用任何telnet客户端(只要它可以处理telnet协商),而且不必制作自己的自定义客户端。缺点是,您必须在服务器中自己实现整个命令行编辑功能,并且按键的延迟可能很高,因为每个按键都必须发送到服务器,然后从服务器返回。

拥有自定义客户端的好处是,有一些库可以轻松地处理命令行编辑并帮助完成。这里的主要缺点是您必须创建一个自定义客户端。

telnet主机后,输入ctrl + ]进入telnet命令提示符,然后执行mode character。之后,telnet客户端进入"一次一个字符"模式,选项卡完成应该可以正常工作。

sunnogo@a3e420:~$ telnet 192.168.193.88 10015   
Trying 192.168.193.88...  
Connected to 192.168.193.88.  
Escape character is '^]'.  

my_prompt>
my_prompt>
my_prompt>
my_prompt>^]  
telnet> mod character
my_prompt��  
my_prompt>  
my_prompt>  

最新更新