【问题标题】:clear output in telnettelnet 清除输出
【发布时间】:2011-07-07 10:40:07
【问题描述】:

有什么方法可以让 telnet 应用程序清除客户端的输出(使用 Java Socket 连接 + 缓冲区)?例如,程序向连接的用户查询登录名和密码,当他们成功登录后,我在 Windows 上输入cls,在 Linux 下输入clear

【问题讨论】:

    标签: java telnet


    【解决方案1】:

    telnet 应用程序是一个终端仿真器。在过去,与计算机通信的唯一方法是使用带有纯文本屏幕和键盘的终端。终端将您键入的所有内容发送到计算机。计算机发回打印在屏幕上的字符。就像远程登录一样。 DEC 创建了一系列终端,称为 VT52、VT100 等。它们能够解释特殊的控制序列,以便计算机可以向终端发出更多花哨的指令。这些控制序列由 ANSI 标准化,现在称为 ANSI 转义码。理解 VT100 转义码的终端仿真器称为 VT100 终端仿真器。

    您可以在维基百科和其他地方查找 ansi 转义码。它们都以转义字符代码开头,然后是控制字符。清屏控制字符为“2J”。 所以,你需要做的就是将这个字符串从你的服务器发送到 telnet 客户端:

    myOutputStream.print("\u001B[2J");
    myOutputStream.flush();
    

    您也可以发送其他控制字符。尝试 "\u001B[7m" 反转屏幕。

    【讨论】:

    • 顺便说一句,你知道有这些转义码的网站吗?维基百科这次帮不上什么忙……
    【解决方案2】:

    如果你需要支持windows,滚动空白行是我在Java中能想到的唯一方法。

    【讨论】:

    • 这是否意味着 Linux 支持它?
    • 据我所知,仅在 Marc B 下面提到的形式中。
    【解决方案3】:

    在 Linux 端,clear 只是简单地发出一些终端控制字符来告诉它清除屏幕。对于 VT 终端,这是Esc]2J。不确定 Windows 是否会支持类似的东西。

    【讨论】:

    • 但是如何从服务器端调用 clear 呢?不只是发送一个字符串,这是肯定的。
    • 是的,你可以通过发送一个字符串:)
    • 这就是 VT 转义序列的完成方式。这只是终端的一些输出,使用文字转义字符(ascii 27)作为 VT 命令的开头。
    • 好吧,发送字符串cls 不适用于Windows。不重要,但仍然有点糟糕......
    • 这是因为 'cls' 是 cmd.exe/command.com 中内置的命令。字符串本身什么也不做。 VT 是 DEC 提供的老式终端的通用名称。 VT 转义序列是用于操纵光标位置、清除屏幕等的特殊控制代码......多年来,序列成为事实上的标准并且仍在广泛使用,尽管硬件终端几乎完全消失了。跨度>
    猜你喜欢
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 2011-07-15
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多