c언어 소켓 파일전송 질문입니다.
글쓴이: lkimilhol / 작성시간: 금, 2013/12/13 - 4:37오후
코딩 중 딱히 에러가 뜨진 않구, 서버랑 클라이언트 연결은 되는데 파일전송이 제대로 이루어 지지 않네요.
파일 사이즈가 약 5mb 정도 되는데 어떤 때에는 몇 kb, 어떤데는 1mb정도 파일이 오고
클라이언트 에서 프로그램이 먼저 종료 되어 버립니다.
제 예상으론 약간 버퍼에 관련된거 같기도한데...
혹시 파일전송이 제대로 이루어 지지 않는 여러 이유좀 던져(?) 주시겠습니까?
한번 이것저것 다 체크해 보려고 합니다. 답변 부탁드릴게요!
Forums:
보아하니.
메모리 관리가 잘못되어 예외상황에 의해 클라이언트가 그냥 종료돼버리는 듯 합니다.
디버거 붙여서 돌려보시면 왜 죽게 되는지 쉽게 알 수 있겠죠.
--
....
파일 전송 프로토콜별로 현상이 나뉠거 같은데....
UDP 전송일 경우에는
수신 지연에 대한 생각을 못하신 경우 같습니다.
수신시 recvfrom후 내용을 QUEUE나 임의의 BUFFER에 담아서 사용하시는게 좋을 거 같습니다.
UDP 특성상 메시지 유실로 인해 사이즈가 각각 틀려진거 같습니다.
TCP 전송일 경우에는
메시지가 붙어서 오는현상에 대해 처리를 못하신거 같습니다.
120byte를 한번에 fwrite를 할려고 recv를 받앗는데 160을 받았지만 120만 썻다. 이런 경우에 40byte라는 유실이 생기기 때문에
보통은 HEADER에 다음 DATA의 사이즈를 명확하게 명시를 하여
HEADER확인 후 사이즈만큼 recv를 더 받거나, 혹은 recv 받은 DATA의 HEADER를 확인 후 명시된 사이즈만큼 쓰고 다음 HEADER를 확인하는 방법으로 하셔야 할 거 같습니다.
댓글 달기