2017-12-13 10 views
0

私はネットワーク要素に接続して情報を得るためにJavaのtelnetソケットを使用しています。接続が動作し、出力を読み取ることができます。
ここでは、各コマンドの出力のページ番号を削除して、プロセスを最適化したいと考えています。Javaソケットを使用してウィンドウのサイズを変更する

接続は次のコードで構成されていますので、

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); 

、私は長い間、出力して、いくつかのコマンドを実行し、結果はデフォルトの端末のサイズ(80×25)を合わせて表示され、私のようなものを読むことができます:

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"); 

は作るために、サーバーに送信するためのいくつかのコードがありますできます?

+0

あなたは私がそれを見たことがない「押します(終了するにはQ)を続行するには任意のキーを」あなたの端末が生成していることを言っています。 – slim

+0

@slimまさに!何らかの理由で、 "生の" Javaソケットによって作られたtelnetクライアントは、他のGUIクライアントのようにページネーションを設定します。 – elias

答えて

0

見つけました!

解決策は、サブオプションを使用してウィンドウサイズをネゴシエートし、PrintWriterの代わりにBufferedOutputStreamを使用することです。これは、バイトではなく文字で処理することに焦点を当てているためです。

enter image description here

関連する問題