현재 장비에 telnet을 통해서 로그인하고 간단한 SNMP 명령을 보내는 프로그램을 만들었습니다.
그런데,
몇 번의 테스트를 해보니,
cmd 창에서 telnet을 하여 해당 IP와 포트에 접속할 때 는 문제가 없는데,
프로그램 상에서 telnet을 연결하면,
이상한 값의 데이터를 받아옵니다.
그레서 몇 시간을 고민 하던중에,
위 URL에서 ParseTelnet 메서드를 가져와 수행해야 데이터를 잘 받아오는 경우를 확인했습니다.
자세히 보실 필요는 없고 아래와 같은 소스코드 입니다 ..ㅜㅜ
바이트 하나씩 가지고 와서 분류한 다음 미리 정해진 작업을 처리하는 메서드 같습니다
void ParseTelnet(StringBuilder sb)
{
while (tcpSocket.Available > 0)
{
int input = tcpSocket.GetStream().ReadByte();
switch (input)
{
case -1:
break;
case (int)Verbs.IAC:
// interpret as command
int inputverb = tcpSocket.GetStream().ReadByte();
if (inputverb == -1) break;
switch (inputverb)
{
case (int)Verbs.IAC:
//literal IAC = 255 escaped, so append char 255 to string
sb.Append(inputverb);
break;
case (int)Verbs.DO:
case (int)Verbs.DONT:
case (int)Verbs.WILL:
case (int)Verbs.WONT:
// reply to all commands with "WONT", unless it is SGA (suppres go ahead)
int inputoption = tcpSocket.GetStream().ReadByte();
if (inputoption == -1) break;
tcpSocket.GetStream().WriteByte((byte)Verbs.IAC);
if (inputoption == (int)Options.SGA)
tcpSocket.GetStream().WriteByte(inputverb == (int)Verbs.DO ? (byte)Verbs.WILL : (byte)Verbs.DO);
else
tcpSocket.GetStream().WriteByte(inputverb == (int)Verbs.DO ? (byte)Verbs.WONT : (byte)Verbs.DONT);
tcpSocket.GetStream().WriteByte((byte)inputoption);
break;
default:
break;
}
break;
default:
sb.Append((char)input);
break;
}
}
왜 이런 현상이 발생하는지 궁금합니다..
그리고 한가지 더 질문하자면,
프로그램 상에서 텔넷을 연결하여 데이터를 전송받게 되면,
More가 수행되어 한 줄씩 라인이 출력되는걸 볼 수가 있는데요..
코드 상으로 텔넷을 연결하게 될 경우에 그러면
한 라인을 가지고 오기 위해서는 한 바이트씩 데이터를 전송해서 가져와야 하는 건가요??
아니면 데이터를 한 번에 다 받아오긴 하지만,
프로그램 상에서 조금씩 보여주는 건가요??
궁금합니다!