【问题标题】:Capturing ESC key press over Telnet?通过 Telnet 捕获 ESC 按键?
【发布时间】:2012-02-28 04:56:30
【问题描述】:

我们有一个嵌入式应用程序,当我们通过 Serial 访问它时,它会响应“Esc”按下,但当我们通过 Telnet 访问板时则不会。

有某种数据正在发送,但它似乎与我们的“Esc”键不对应。 (如果我们按 ESC,然后 Enter,我们会得到“无法识别的命令”而不是新的提示)我找不到任何关于在 telnet 中按下“ESC”键时发送什么的文档。

关于我如何捕捉这个 ESC 按键的任何想法?

【问题讨论】:

  • 如果我记得以前的 BBS 日子,应该是 ASCII char 27..
  • 编辑:找到它;与 telnet 的数据流路径相关,不包含 ESC 键的捕获。

标签: c++ embedded telnet


【解决方案1】:

Esc key 生成 ASCII 转义字符,其代码为十进制的 27 或十六进制的 1B。

【讨论】:

  • 这是我们通过串行获取的键码,但它似乎不适用于 telnet。
  • @Luciano:这很奇怪。你能临时修改你的嵌入式应用程序以打印出它得到的代码吗?
  • @Luciano:另外,如果你按Ctrl+[ 而不是Esc,会发生什么?
  • 发现它:它与 Telnet 没有直接关系:它们有一个单独的处理器用于 STDIO 和 Telnet 输入,ESC 键捕获在 STDIO 的处理器中处理,而不存在于 Telnet 处理程序中。跨度>
【解决方案2】:

找到它: 与 Telnet 无关,但在哪里捕获了 ESC 按下,并且 Telnet 不在我们输入库中捕获的流路径上。

【讨论】:

    【解决方案3】:

    我知道你有你的答案,但我遇到了这个问题,这不是你的数据流路径的错。我会将其包含在此处,以防其他人在搜索时偶然发现此问题。

    我可以使用CTRL+3(数字三)、CTRL+[ 或按 Esc 键本身发送转义键,但只有在将 telnet 的模式更改为字符后

    1. 先按 telnet 的转义序列(默认为CTRL+]
    2. 输入 mode character 并按 Enter 以禁用 LINEMODE。

    现在您应该可以使用我之前提到的三种方法(Escape 键、CTRL+3CTRL+[)中的任何一种发送转义序列。

    【讨论】:

      猜你喜欢
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多