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

C# Telnet服务器->;退格/删除不起作用,c#,protocols,telnet,C#,Protocols,Telnet,我正在用C#实现一个简单的概念验证Telnet服务器,并通过windows内置Telnet客户端将Telnet连接到它。 我将所有非IAC数据回显到客户端。但是,我不知道如何让backspace/delete正常工作。 我尝试了几种组合,它们作用于telnet客户端的“BS”: “BS”(将光标向后移动一步,但不删除字符) “BS”“DEL”(仅与“BS”结果相同) “BS”“DEL”“ESC[3~”(相同结果) 谁能告诉我退格和从屏幕上删除字符的正确控制顺序是什么 谢谢 Tom删除和退格的

我正在用C#实现一个简单的概念验证Telnet服务器,并通过windows内置Telnet客户端将Telnet连接到它。 我将所有非IAC数据回显到客户端。但是,我不知道如何让backspace/delete正常工作。 我尝试了几种组合,它们作用于telnet客户端的“BS”:

  • “BS”(将光标向后移动一步,但不删除字符)
  • “BS”“DEL”(仅与“BS”结果相同)
  • “BS”“DEL”“ESC[3~”(相同结果)
谁能告诉我退格和从屏幕上删除字符的正确控制顺序是什么

谢谢


Tom

删除和退格的行为取决于服务器的终端模拟。此外,在客户端中点击退格和/或删除键可能会或可能不会向服务器发送实际的退格和删除键代码,这取决于服务器认为模拟是什么。我不相信有一个终端不可知的移动命令返回一个字符并删除最后一个字符。这是一个很好的问题讨论


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

删除和退格的行为取决于服务器的终端模拟。此外,在客户端中点击退格和/或删除可能会或可能不会发送实际的退格nd删除服务器的密钥码,这取决于它认为模拟是什么。我不认为有一个终端不可知的命令可以向后移动一个字符并删除最后一个字符。这是一个很好的问题讨论


最后,不要使用windows内置的telnet客户端。它很糟糕。我更喜欢Van Dyke的,但如果你不想花钱的话,它是一款受欢迎的免费客户端。

我刚刚连接到一个Cisco交换机,并跟踪了IOS是如何实现它的。
IOS正在从客户端向传入的“BS”发送“BS”空格“BS”。因此,我现在就是这样实现的,效果很好。

我刚刚连接到Cisco交换机,并跟踪了IOS是如何实现它的。
IOS正在从客户端发送一个传入的“BS”上的“BS”空格“BS”。因此,我现在就是这样实现的,效果很好。

多年来我一直在尝试解决这个问题,但如果echo打开,它实际上非常简单。当检测到
\b
(退格)时。您可以(通过套接字)发送:

0x08
发送退格,这是一个非破坏性退格,它只会将光标向左移动。
0x20
发送一个空格,删除该字符,然后退格再次将光标向左移动。效果很好


干杯

我一直想弄明白这一点,但如果echo打开,实际上非常简单。当检测到
\b
(退格)时。您可以(通过套接字)发送:

0x08
发送退格,这是一个非破坏性退格,它只会将光标向左移动。
0x20
发送一个空格,删除该字符,然后退格再次将光标向左移动。效果很好

干杯

它可以删除您在终端和缓冲区中回显的数据。 首先检查退格并减少缓冲区,然后使用BS和空格。这对Telnet非常有效。您不必更改teraterm或putty中的任何内容

它可以删除您在终端和缓冲区中回显的数据。
首先检查退格并减少缓冲区,然后使用BS和空格。这对Telnet非常有效。您不必更改teraterm或putty中的任何内容。

使用Wireshark之类的数据包嗅探器,您可能会受益匪浅。让Wireshark监视出站Telnet连接,Telnet到行为良好的服务器,并观察它发送bac的内容k当back-spacing时。是的,如果我有一个telnet服务器来测试:)不幸的是,我想不出任何能模仿我想要的行为的东西。然后找到一个linux live安装,它将运行一个U盘并运行telnet服务器。使用像Wireshark这样的数据包嗅探器,你可能会受益匪浅。有Wireshark mo吗nitor出站Telnet连接,Telnet到一个行为良好的服务器,并观察它在反向间隔时发送回什么。是的,如果我有一个Telnet服务器来测试:)不幸的是,我想不出任何模仿所需行为的,并且我有权访问。然后找到一个linux live安装,它将运行USB棒并运行Telnet服务器。我们ll,正如我在帖子中所指出的,我对客户端发送“b”(退格)做出反应并尝试使用不同的控制序列进行回复,以实现所需的行为。我已经阅读了您发布的文章,其中说要执行我所做的操作。我不想使用securrt或PuTTY来执行此操作,顺便说一句,这两种方式显示了相同的行为。您的问题不清楚您如何确定发送的内容。您是否正在查看ser上的调试信息当你点击backspace键时,是ver-side还是仅仅依靠windows telnet发送BS?我正在查看调试信息并使用wiresharkWell跟踪流量,正如我在文章中所指出的,我正在对客户端发送“BS”(backspace)做出反应并尝试使用不同的控制序列进行回复,以实现所需的行为。我已经阅读了您发布的文章,其中说要执行我所做的操作。我不想使用securrt或PuTTY来执行此操作,顺便说一句,这两种方式显示了相同的行为。您的问题不清楚您如何确定发送的内容。您是否正在查看ser上的调试信息当你按下退格键时,是不是仅仅依靠windows telnet发送BS?我正在用wireshark查看调试信息和跟踪流量
Socket.Send(new byte[] { 0x08, 0x20, 0x08 });
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);