【问题标题】:Receive terminal up/down keys using QTcpSocket使用 QTcpSocket 接收终端向上/向下键
【发布时间】:2014-11-16 22:57:57
【问题描述】:

我已经使用 QTcpSocket 创建了一个简单的 telnet 服务器。当(telnet)客户端一次发送一行命令时,它工作得很好。

我现在希望我的 telnet 服务器捕获上/下箭头键,以便我可以从客户端调用以前的命令。当我在 telnet 客户端的键盘上按向上/向下键时,我看到 ^[[A 在屏幕上,但我认为它没有发送到服务器。

有没有办法强制 telnet 客户端发送这些字符(无需按 Enter)?我怀疑这与无缓冲模式有关,但文档说 QTcpSocket 不能做无缓冲模式。我在正确的轨道上吗?有没有办法做到这一点?

【问题讨论】:

    标签: c++ qt client telnet buffered


    【解决方案1】:

    解决方案似乎是 telnet 服务器必须告诉客户端进入字符模式。这可以通过发送 IAC 控制序列来完成。一个例子在这里:

    Forcing telnet client into character mode

    【讨论】:

      【解决方案2】:

      您说您使用QTcpSocket 编写了一个远程登录服务器,但您对远程登录客户端只字未提……是商业远程登录客户端吗?你自己编程过吗?

      如果你的问题是

      "我怎样才能强制 telnet 客户端发送这些字符(没有 需要回车)”

      那么您必须告诉我们有关 telnet 客户端的信息……否则我们如何为您提供帮助?如果您使用 Linux 命令行 telnet 客户端,那么我认为您应该阅读有关 LINEMODE 的信息(网上冲浪您可以很容易地了解它的详细信息)。

      QTcpSocket 的文档告诉您无法在QIODevice::Unbuffered 模式下打开它,但这并不意味着您将无法发送/接收单个字符...

      【讨论】:

      • 我的 Telnet 服务器应用程序应该适用于所有 telnet 客户端,并假设它们支持 xterm/vt100/ansi 代码等。我不想为单个 telnet 客户端编程。
      • @GenerationDSystems:你是对的,这正是我的意思:如果你的问题是“我怎样才能强制 telnet 客户端做某事”,那么我的回答是“这取决于哪个您正在使用的 telnet 客户端”...我很确定 QTcpSocket 上不会发生缓冲,它正在监听接收一些数据...所以服务器端你应该没问题...无论如何你还没有共享告诉我们你的代码,所以我不知道你在做什么,所以我只是猜测......
      • 我没有相关代码可以分享。我的问题更笼统。我是否通过在输入流上查找代码来处理这个问题? telnet 客户端是否默认在“LINEMODE”下工作?不知道如何解决问题
      • @GenerationDSystems:我认为大多数 telnet 客户端都在 LINEMODE... 所以我认为您不能查看输入流上的代码来处理它,但我不是真正的 telnet 专家...所以也许其他人可以为您提供其他详细信息...
      • 解决方案似乎是服务器可以告诉客户端(无论哪个 telnet 客户端)使用 IAC 控制序列进入字符模式(而不是行模式)。
      猜你喜欢
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      相关资源
      最近更新 更多