2011-08-08 4 views
0

내부 네트워크 응용 프로그램 간의 통신을위한 간단한 텔넷 연결 데몬을 만들고 BufferedReader에서 첫 번째 줄을 읽을 때 문제가 발생했습니다.BufferedReader 스트림의 첫 번째 읽음에서 발생하는 쓰레기

이 코드 스 니펫은 다른 정크가 많이 있기 때문에 완벽하지 않으므로 개체 생성을 포함하고 스팀에서 읽는 것만 제외하고이 코드 스 니펫을 제거했습니다. 텔넷 접속에 test를 입력

in = new BufferedReader(new InputStreamReader(this.client.getInputStream())); 
out = new PrintWriter(this.client.getOutputStream(), true); 
String line; 

while (true) { 
    out.println(flag); // flag is just an integer    
    System.out.println(line); 
    // Processing the line and updating 'flag' accordingly 
} 

프로그램을 실행 한 콘솔에  v? v  v? v' ²? v? ²?test을 얻었다. 이것은 첫 번째 행 뒤에 전송 된 행에는 발생하지 않습니다.

사용자가 인터페이스하기 전에 해당 쓰레기를 제거하여 첫 번째 줄과 함께 보내지 않는 방법이 있습니까? 또는이 문제는 내 텔넷 클라이언트로 인해 발생합니다 (이 인터페이스를 사용하는 클라이언트를 작성할 때 수정 될 수 있음)?

답변

4

텔넷 프로토콜 협상이라고 생각됩니다. 이상적으로는 RFC 854을 신중하게 읽어야합니다.

으로 문자 인코딩을 지정하지 않고 InputStreamReader을 사용하면 안되며, 플랫폼 기본 인코딩이 원하는 인코딩이 아닐 수 있습니다.

+0

당신이 맞다고 생각합니다. 나는 그 프로토콜 (사실 텔넷이라고 불렀는지 확실하지 않습니다)에서 아무것도 활용하지 않기 때문에 원시가 아닌 텔넷을 사용해야했습니다. 어쨌든 나는 그것을 고맙게 생각했다. – SamT

+0

@SamT :'텔넷'은 종종 "평범한 TCP/IP 연결 클라이언트"로 사용되는 반면 실제로는 매우 특정한 텔넷 프로토콜을위한 클라이언트입니다. –

+0

@ Joachim Sauer 나는 '거의 사용하지 않는다'고 말할 것입니다. 예를 들어 대화와 같은 코드의 양에 놀랄 것입니다. TN3270을 뱅킹 백엔드에 연결합니다. 현재 프로덕션에 텔넷 클라이언트/서버가 내장 된 시스템이 있습니다. – EJP