2011-10-01 5 views
2

C++에서 (SFML 라이브러리의 도움으로) IRC 클라이언트를 작성하고 있지만 이상하게 작동합니다. NICK 및 USER 명령을 보내고 서버에 연결할 수 있지만 JOIN 명령에 "이상하게 작동하는 임의의 코드"를 작성해야하는 이상한 일이 많이 있습니다. 나는 명령이 IRC RFC를 준수하고 있음을 확신한다.IRC 클라이언트 - JOIN에 대한 응답 없음

나는 소켓이 보내고 자하는 것을 전송하고 Wireshark로 그것을 확인했다. 그래서 내가 여기에 게시 한 것은 패킷의 메시지이다.

char mess[] ="NICK lmno \n\rUSER lmno 0 * :lmno\n\rJOIN #mytest\n\r"; 
Socket.Send(mess, sizeof(mess)); 

이하지 않는 :

char msg[] = "NICK lmno \r\nUSER lmno 0 * :lmno \r\n"; 
char msga[] = "JOIN #mytest \r\n"; 
Socket.Send(msg, sizeof(msg)); 
Socket.Send(msga, sizeof(msga)); 

다음 예에서 소켓이 이미 (이 경우 irc.freenode.net 임) IRC 서버

이 작동에 연결되어 그러나 기이하게도이 작품 :

char msg[] = "NICK lmno \r\nUSER lmno 0 * :lmno \r\n"; 
char msga[] = "JOIN #mytest \r\n"; 
Socket.Send(msg, sizeof(msg)); 
Socket.Send(msga, sizeof(msga)); 
Socket.Send(msga, sizeof(msga)); 

나는이 주제에 대한 연구를 해본 결과 아무도 sa 나 문제. 낯선 사람은 텔넷에서이 작업을 시도했을 때 한 번만 JOIN을 보내면됩니다. 누구든지 조언을 해 줄 수 있습니까?

감사합니다, SFI

답변

4

그것은 C - 문자열의 끝에서 종료 '\ 0'문자로 할 필요가 있습니다. 시도해보십시오.

Socket.Send(msg, sizeof(msg) - 1); 
Socket.Send(msga, sizeof(msga) - 1); 
+1

아, 감사합니다! 나는 send 문장 중 하나를 제외한 모든 것을 가지고있다. 고맙습니다. – SFI

+1

'sizeof() - 1' 대신'strlen()'을 사용하십시오. –

관련 문제