2008-11-07 2 views
7

텔넷 클라이언트에서 소켓 연결을 수락하고 간단한 키보드 구동 문자 GUI를 사용하는 응용 프로그램이 있습니다.텔넷 클라이언트를 문자 모드로 변경하십시오.

적어도 Linux에서는 텔넷 클라이언트가 기본적으로 줄 단위 모드로 설정되어 있으므로 항상 수동으로 ^]mode char을 수행해야합니다.

관련 RFC의 설명은 클라이언트가 연결하자마자 내 응용 프로그램이 단순히 문자 IAC DONT LINEMODE (\377\376\042)을 보낸 경우 클라이언트가 문자 모드로 강제되어야 함을 나타냅니다. 그러나 차이는 없습니다.

작업을 수행하는 가장 간단한 코드는 무엇입니까? 이상적으로 문자열 만 보내면됩니다. 내 응용 프로그램은 클라이언트가 보낸 모든 정크를 흡수 할 수 있습니다.

답변

6

가치가있는 부분에 대해서는 직접 해결하십시오.

// IAC WONT LINEMODE IAC WILL ECHO 

write(s,"\377\375\042\377\373\001",6); 

은 리모컨 (Linux 상자의 Xterm에서 텔넷 이상)을 올바른 상태로 가져옵니다.

8

흥미 롭습니다. 내 텔넷 클라이언트가없이 올바른 상태로 얻을 것 같다,하지만 난 완성도를 위해 그것을에서 왼쪽 : I는 IAC 실 거예요 LINEMODE 중복 될 것으로 보인다

IAC WILL ECHO IAC WILL SUPPRESS_GO_AHEAD IAC WONT LINEMODE 
255 251 1 255 251     3 255 252  34 

를 보내 더 행운이 있었다.

0

케빈의 솔루션은 잘 작동 : 댓글이 약간 잘못 write(s,"\377\375\042\377\373\001",6);

있지만. 그것은, "LINEMODE 마십시오"없습니다 "실 거예요 LINEMODE을"말을해야 예 : // IAC DO LINEMODE IAC WILL ECHO

(출처 : rfc854)

+0

NVT (기본 네트워크 가상 터미널)과 동등한 기본 상태 텔넷의 각 끝 연결은 __everything__이 비활성화 된 것처럼 동작해야하고, 한쪽 끝이 제공 한 옵션이 자신의 WILL 및 다른 쪽의 DO 응답 및/또는 동일한 끝이 원하는 동일한 옵션에 동의 할 때까지는 아무 것도 활성화되지 않습니다. 다른 끝은 DO로 요청되었고 다른 끝은 답장됩니다. 물론 한 방향의 옵션은 다른 방향의 같은 옵션과는 별개입니다 - ECHO가 _special_ case ... – SlySven

+0

...이며 허용되지 않습니다 (SHOULD NOT 또는 역방향이 이미 ECHOing 모드 인 경우 한 방향으로 ECHO에 연결해서는 안됩니다. – SlySven