[네트워크 프로그래밍] 클라이언트가 보낸 문자열을 서버에서 확인이 가능한가요??

조회수 485회
retval=recv(clnt_socks[job1],buf,BUFSIZE,0);
// buf[retval]='\0';

if (strcmp(answer, buf) == 0) {
    for (i = 0; i < clnt_cnt; i++) {
        //...
    }
}
else {
    for (i = 0; i < clnt_cnt; i++) {
        //...
    }
}

위 코드는 클라이언트 clnt_socks[job1]이 보낸 메시지를 서버에서 받아서 if문으로 answer와 비교하는 코드입니다

[ 질문 ] 그런데 bufanswer이 일치해도 else문으로 넘어가는데 비교 방법이 잘못된것인가요?

answer

{" [strawberry] \n"," [computer] \n"," [car] \n"," [airplane] \n"," [summer] \n"}

들 중에 하나입니다.`

1 답변

  • else 문으로 넘어간다는 말은 strcmp가 0을 반환하지 않았다는 것인데요.

    제가 통신 관련된 지식이 없어서, 단순 문자열 비교의 관점에서 의심 가는 부분을 2가지 말씀 드리겠습니다.

    • 질문에서 answer에는 문장마다 뒤에 '\n'이 붙어 있는데, buf는 어떤 식으로 취득한 값인지 모르겠으나 동일하게 뒤에 '\n'이 붙어있는지 확인해 봐야 합니다. 예를 들어, fgets 함수로 입력을 받게되면 문자열뒤에 '\n'이 붙습니다만, gets 함수나 scanf 함수로 문자열을 입력 받게되면 뒤에 '\n'이 안 붙습니다. 그러므로 눈에 보이는 글자만 보시지 마시고 안보이는 부분의 값까지도 아스키코드로 출력해서 그 값까지도 같은지 확인해 보시길 바랍니다.

    • 그리고 혹시 answer가 텍스트 파일의 값을 fgets로 읽어 온 것이고, 그 텍스트 파일이 윈도우즈에서 생성된 파일인데 귀찮아서 그걸 단순 복사해서 리눅스에서 사용하는 중이라면, 리눅스는 윈도우즈에서 생성된 텍스트파일의 줄바꿈 표시를 '\n'이 아닌 '\r\n'로 읽어옵니다. 귀찮더라도 동일한 OS 환경에서 파일을 생성하고 사용한다면 이러한 문제는 안생깁니다.

    위에도 적었습니다만, 눈에 보이는 글자만 보시지 마시고 안보이는 부분의 값까지도 아스키코드로 출력해서 그 값까지도 같은지 확인해 보시길 바랍니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)