使用Java Socket更改窗口大小

时间:2017-12-13 16:48:04

标签: java sockets telnet

我正在使用Java telnet套接字连接到网络元素并获取一些信息。连接工作,我可以读取输出 现在我想优化过程,消除每个命令输出的分页。

使用以下代码建立连接:

Socket soc = new Socket(ip,23);
InputStream in = new DataInputStream(soc.getInputStream());
Writer out = new PrintWriter(soc.getOutputStream(), false);
//... 
out.write(command+"\n");
out.flush();
//...
String output = readUntilPrompt(in);

因此,当我使用长输出执行某个命令时,结果似乎符合默认的终端大小(80x25),我可以读取类似的内容:

output line 
output line
[...]
output line
output line
Press any key to continue (Q to quit)

这样做,使用Linux的默认终端,分页发生,但如果我调整窗口大小,分页将消失,所有输出都将打印到控制台。

我想要的是以编程方式对Java套接字执行相同的操作。例如,要“告诉”设备我的Java客户端的大小如100x1000。 我已经尝试了Apache's Commons Net way,但它不起作用。

搜索答案时,有人说你可以发送SIGWINCH信号或者写这样的东西,但我不确切知道它是否有效:

out.write("\\e[8;200;200t");

是否有一些代码要发送到服务器以使其正常工作?

1 个答案:

答案 0 :(得分:0)

发现它!

解决方案是使用子选项来协商窗口大小,并使用BufferedOutputStream而不是PrintWriter,因为它专注于处理字符而不是字节。

enter image description here