Java 清除telnet中的输出

Java 清除telnet中的输出,java,telnet,Java,Telnet,有没有办法制作一个telnet应用程序来清除输出客户端(使用Java套接字连接+缓冲区)?例如,程序向连接的用户查询登录名和密码,当他们成功登录时,我会对Windows执行cls,对Linux执行clear。在Linux端,clear只需发出一些终端控制字符,告诉它清除屏幕。对于VT终端,这是Esc]2J。不确定Windows是否支持类似的功能。如果需要支持Windows,我在Java中可以想到的唯一方法是滚动空行。telnet应用程序是一个终端仿真器。在真正古老的时代,与计算机通信的唯一方式是

有没有办法制作一个telnet应用程序来清除输出客户端(使用Java套接字连接+缓冲区)?例如,程序向连接的用户查询登录名和密码,当他们成功登录时,我会对Windows执行
cls
,对Linux执行
clear

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

如果需要支持Windows,我在Java中可以想到的唯一方法是滚动空行。

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

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

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

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

但我如何才能从服务器端调用clear?这是肯定的,不仅仅是通过发送字符串。是的,您可以通过发送字符串:)这就是VT转义序列的工作方式。它只是使用文本转义字符(ascii 27)向终端输出的一些内容在VT命令之前。嗯,发送字符串
cls
对Windows不起作用。不重要,但仍然有点糟糕……这是因为“cls”是cmd.exe/command.com中内置的命令。字符串本身不起任何作用。VT是DEC提供的旧学校终端的通用名称。VT转义序列是特殊控件用于操纵光标位置、清除屏幕等的代码。多年来,这些序列已成为事实上的标准,并仍在广泛使用,即使硬件终端几乎完全消失。这是否意味着Linux支持它?据我所知,仅以Marc B所述的形式。顺便问一句,你知道有任何网站这些转义码?维基百科这次帮不了什么忙。。。