【发布时间】:2011-07-07 10:40:07
【问题描述】:
有什么方法可以让 telnet 应用程序清除客户端的输出(使用 Java Socket 连接 + 缓冲区)?例如,程序向连接的用户查询登录名和密码,当他们成功登录后,我在 Windows 上输入cls,在 Linux 下输入clear。
【问题讨论】:
有什么方法可以让 telnet 应用程序清除客户端的输出(使用 Java Socket 连接 + 缓冲区)?例如,程序向连接的用户查询登录名和密码,当他们成功登录后,我在 Windows 上输入cls,在 Linux 下输入clear。
【问题讨论】:
telnet 应用程序是一个终端仿真器。在过去,与计算机通信的唯一方法是使用带有纯文本屏幕和键盘的终端。终端将您键入的所有内容发送到计算机。计算机发回打印在屏幕上的字符。就像远程登录一样。 DEC 创建了一系列终端,称为 VT52、VT100 等。它们能够解释特殊的控制序列,以便计算机可以向终端发出更多花哨的指令。这些控制序列由 ANSI 标准化,现在称为 ANSI 转义码。理解 VT100 转义码的终端仿真器称为 VT100 终端仿真器。
您可以在维基百科和其他地方查找 ansi 转义码。它们都以转义字符代码开头,然后是控制字符。清屏控制字符为“2J”。 所以,你需要做的就是将这个字符串从你的服务器发送到 telnet 客户端:
myOutputStream.print("\u001B[2J");
myOutputStream.flush();
您也可以发送其他控制字符。尝试 "\u001B[7m" 反转屏幕。
【讨论】:
如果你需要支持windows,滚动空白行是我在Java中能想到的唯一方法。
【讨论】:
在 Linux 端,clear 只是简单地发出一些终端控制字符来告诉它清除屏幕。对于 VT 终端,这是Esc]2J。不确定 Windows 是否会支持类似的东西。
【讨论】:
cls 不适用于Windows。不重要,但仍然有点糟糕......