Telnet服务器 - >退格/删除不起作用

时间:2009-11-06 18:53:39

标签: c# protocols telnet

我正在C#中实现一个简单的概念验证Telnet服务器,并通过telnet客户端内置的窗口telnet到它。 我将所有非IAC数据回送给客户端。但是,我无法弄清楚如何使退格/删除正常工作。 我尝试了几种来自telnet客户端的“BS”组合:

  • 'BS'(将光标向后移动但不删除字符)
  • 'BS''DEL'(与'BS'相同的结果)
  • 'BS''DEL''ESC [3~'(同样结果)

任何人都可以请指出什么是退格的正确控制序列并从屏幕上删除字符?

谢谢,

汤姆

4 个答案:

答案 0 :(得分:5)

我被困在试图解决这个问题很长时间,但如果回声开启的话,它实际上非常简单。检测到\b(退格)时。你可以发送(通过套接字):

Socket.Send(new byte[] { 0x08, 0x20, 0x08 });

0x08发送退格区,这是一个非破坏性的退格区,只是将光标移动到左侧。 0x20发送一个空格,删除该字符,然后退格再次将光标移回左侧。像魅力一样工作!

干杯

答案 1 :(得分:2)

删除和退格的行为取决于服务器的终端仿真。此外,在客户端中命中退格和/或删除可能会或可能不会将实际退格和删除密钥代码发送到服务器,具体取决于它认为仿真的内容。我不相信有一个终端不可知的命令,用于移回一个字符并删除最后一个字符。 Here's对问题进行了很好的讨论。

最后,不要使用telnet客户端内置的窗口。太糟糕了。我更喜欢Van Dyke的SecureCRT,但如果你不想花钱,PuTTY是一个受欢迎的免费客户。

答案 2 :(得分:1)

我刚刚连接到Cisco交换机并跟踪IOS如何实现它。 IOS正在从客户端传入'BS'上发送'BS''SPACE''BS'。所以,这就是我现在实现它并且工作得很好的方式。

答案 3 :(得分:1)

$sql = $db->prepare("SELECT color FROM table WHERE type = :key");
$sql->bindValue(':key', $type, PDO::PARAM_STR);
$sql->execute();

$colors = $sql->fetchAll(PDO::FETCH_BOTH));
print_r($colors);

删除您在终端上以及缓冲区中回显的数据。 首先检查退格并减少缓冲区,然后使用BS和Space。它的工作完全适用于Telnet。你不需要改变teraterm或putty中的任何东西。