2017-12-13 21 views
0

Java 텔넷 소켓을 사용하여 네트워크 요소에 연결하고 정보를 얻습니다. 연결이 작동하고 출력을 읽을 수 있습니다.
이제 각 명령 출력의 페이지 매김을 제거하여 프로세스를 최적화하고 싶습니다.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); 

, 나는 긴 출력이 어떤 명령을 실행, 결과는 기본 터미널 크기 (의 80x25)을 맞게 나타나고 내가 좋아하는 뭔가를 읽을 수 있습니다 :

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

, 같은 일을 리눅스의 기본 터미널을 사용하여 페이지 매김가 발생합니다,하지만 난 창 크기를 조정하는 경우, 페이지 네이션이 사라지고 모든 출력이 콘솔에 인쇄됩니다.

내가 원하는 것은 프로그래밍 방식으로 Java 소켓과 동일하게 수행합니다. 예를 들어 Java 클라이언트의 크기가 100x1000 인 장비를 "알려주는"경우. 이미 Apache's Commons Net way을 사용해 보았지만 작동하지 않습니다. 정확히 작동

답변을 검색

은, 어떤 사람들은 당신이 SIGWINCH 신호를 보내거나 다음처럼 작성할 수 있다고,하지만 난 몰라 :
out.write("\\e[8;200;200t"); 

만들기 위해 서버로 보낼 수있는 몇 가지 코드가 작동합니까?

+0

당신이 당신의 터미널이 "(Q 종료하기 위해) 계속하려면 아무 키"를 생성하는 건가요 나는 것을 본 적이 없습니다. – slim

+0

@slim 바로 가기! 어떤 이유로 "원시"Java 소켓에 의해 만들어진 텔넷 클라이언트는 다른 GUI 클라이언트와 마찬가지로 페이지 매김을 설정합니다. – elias

답변

0

발견!

해결 방법은 하위 크기를 사용하여 창 크기를 협상하고 PrintWriter 대신 BufferedOutputStream을 사용하는 것입니다. 이는 바이트가 아닌 문자 처리에 초점을 맞추기 때문입니다.

enter image description here