소켓프로그래밍에서요 read나 recv로 메시지를 받을때

jamongx의 이미지

잘 받다가 갑자기 이상한 글자를 받는 경우가 생기는데요

원래는 'put'이라는 문자를 받아야 하는데

간혹 '?'라던가 '뙒' 같은 문자들을 받습니다.

보내는 쪽에서는 문제가 없는 듯하구요

도대체 뭐가 문제 일까요? ㅡㅡ;

File attachments: 
첨부파일 크기
Package icon 부탁해요.zip4.37 KB
kukuman의 이미지

혹시 recv에서 받는 버퍼를 초기화 하지 않으신 건 아닌지요?

그 경우 밖에 없을꺼 같은데...

Be at a right place at a right time...

jamongx의 이미지

char message_from_client[4];


while(1) {

         memset(message_from_client, 0,   4);
         read(clnt_sd, message_from_client, 4);  또는
         recv(clnt_sd, message_from_client, 4, 0);
}

이런식으로 초기화해주는데요 ㅡㅡ;

7, 8번 정도 잘 돌아가다가 이상한 문자가 떠버리네요..

용모수려 재색겸비

ifyou의 이미지

소스가 긴가요?

관련 소스 조금만 더 올려주시면.. ^^;

jamongx의 이미지

소켓프로그래밍인데요

음...클라이언트랑 서버랑 파일 주고 받는 것입니다.

근데 웃기는게 scanf를 사용하면 보내는 메시지가 깨져서 가네요

소스가 길진 않구요 간단합니다.

댓글 첨부 파일: 
첨부파일 크기
Package icon 0바이트

용모수려 재색겸비

ifyou의 이미지

에구 기네요.. ^^;

컴파일해서 실행도 시켜보고 여기저기 봤는데.. 사실 잘 모르겠네요.

제대로 실행을 시키지 못해서 상황을 재현도 못해봤고..

낮에 회사일 안하고 다른 사람 소스 봐준다는 생각하기 마음도 급하고요 :)

우선 눈에 띄는 것 두가지가 있는데, c3.c에서 select 라는 변수가 있는데,

소켓함수중에서 select라는 함수가 있습니다. 지금 문제와 상관이 있는지는

몰라도 꺼림직합니다.


main()
{
     printf("%c:%d\n",select);
}

head만 제대로 인클루드 시켜주면 위 코드 동작하거든요...

그리고, char file_name[] 변수를 scanf()에서 사용할때 &사용하지 않아야

하는데, s3.c, c3.c 두군데 모두 사용하고 있네요.

내공이 부족해서 인지, 다른 사람 코드 해석하기 힘드네요.. ^^;

저는 요까지~

jamongx의 이미지

저도 도저 원인을 몰라서 결국에는 걍 다른 식으로 했는데요

open read write를 사용하였는데 어디서 쓰레기 값이 들어가서

그렇게 출력되는지 알수가 없더라구요

그래서 하는수 없이

표준 입력을 사용해서 해결하였습니다.

fopen fread fwrite를 사용했어요..

중간에 fflush만 잘 사용하니 쓰레기 값 문제는 생기지 않는군요..

조언 주셔서 감사합니다.

용모수려 재색겸비