我正在用 C# 实现一个简单的概念验证 Telnet 服务器,并通过内置在 telnet 客户端的 windows 远程登录到它。我将所有非 IAC 数据回显给客户端。但是,我无法弄清楚如何让退格/删除正常工作。我尝试了几种从 telnet 客户端作用于“BS”的组合:
- 'BS'(将光标向后移动一个但不删除字符)
- 'BS''DEL'(仅与 'BS' 相同的结果)
- 'BS''DEL''ESC[3~' (结果相同)
谁能告诉我退格和从屏幕上删除角色的正确控制顺序是什么?
谢谢,
汤姆
多年来,我一直试图弄清楚这一点,但如果打开回声,它实际上非常简单。当\b
检测到(退格)时。您可以发送(通过套接字):
Socket.Send(new byte[] { 0x08, 0x20, 0x08 });
0x08
发送退格,这是一个非破坏性的退格,它只是将光标移动到左边。0x20
发送一个删除该字符的空格,然后退格再次将光标移回左侧。奇迹般有效!
干杯
我刚刚连接到 Cisco 交换机并跟踪 IOS 是如何实现它的。IOS 在来自客户端的传入“BS”上发送“BS”“SPACE”“BS”。所以,这就是我现在实现它的方式并且效果很好。
static uint8_t space = 0x20;
static uint8_t BS = 0x08;
if (ui8Char == 0x08)
{
if (i != 0) i--;
tcp_write(pState->pConnectPCB, &BS, 1, 1);
tcp_write(pState->pConnectPCB, &space, 1, 1);
它会删除您在终端和缓冲区中回显的数据。首先检查退格并减少缓冲区,然后使用 BS 和空格。它非常适合 Telnet。您不必更改 teraterm 或腻子中的任何内容。