소켓 프로그래밍 관련 질문입니다.

글쓴이: 익명 사용자 / 작성시간: 토, 2011/08/06 - 8:59오후
소켓 프로그래밍을 입문해서 이제 막 공부를 시작했는데요,
궁금한게 생겨 이렇게 질문 드립니다.
TCP/IP를 이용하면 신뢰할 수 있는 데이터 전송이 보장되고,
Application level에서 프로그래밍을 할 때 서버와 클라이언트 간 프로토콜을 정의해야 한다고 배웠습니다.
만약 클라이언트에서 write(sock, buffer, 100);과 같이 데이터를 전송하고
처음 10 바이트에 헤더 정보가 있어서
서버에서 read(sock, buffer, 10)과 같이 헤더 데이터를 먼저 받는다고 할 때에
이렇게 read로 데이터를 읽는다고 하면 서버쪽 socket 버퍼에 클라이언트에서 보낸 데이터가 10바이트 이상 들어왔다는 가정이 있어야 하는데
이런건 따로 확인 안해도 되는건가요? 만약 아직 5바이트만 들어왔는데, read(sock, buffer, 10)이 호출되면 5바이트만 들어올텐데 이런 경우도 대비해서 코딩해야겠죠?
보통 서버, 클라이언트 간 통신을 할 때에 사용하는 방법이 궁금합니다...(제가 소켓 프로그래밍이 처음이라 정말 기본적인게 헷갈리네요ㅜ)
결과적으로 클라이언트에서 보낸 100바이트가 모두 도착하긴 할텐데 그 시점이 제게 미묘하게 다가옵니다...
두서없는 글이되었는데, 혹시 아시는분 계시면 답변 부탁드립니다.
Forums:
일단 헤더가 10으로 고정이라고 한다면요. read가
일단 헤더가 10으로 고정이라고 한다면요. read가 아니라 recv()를 확인해보세요. 제일 마지막 인자에 flags 설정이 있습니다. 거기에 MSG_WAITALL을 설정하면 10바이트 모두를 받을 동안은 함수 리턴을 하지 않습니다. 이런식으로 헤더를 모두 받는 것을 보장하고, 그 헤더 정보 기반(헤더에 데이터 사이즈가 있어야 겠지요)으로 나머지 데이터를 받을 수 있도록 구현하시면 됩니다.
아 감사합니다!
제가 아직 recv()까지는 진도를 안나가서 몰랐던 거군요!
조금 더 성실하게 배워보도록 하겠습니다.
답변 감사드립니다.
댓글 달기