비동기 소켓 통신 질문입니다.
글쓴이: thslrtoo / 작성시간: 일, 2014/01/05 - 2:51오후
비동기 소켓 통신을 하려는데, 문제가 좀 있습니다.
while (true) { recv(Header); PacketParse(Header); } void PacketParse(Header) { if (Header == A) { recv(Body); } else if (Header == B) { recv(Body); } .... }
서버 소스는 위와 같이 되어있습니다.
우선 Header 패킷을 받고, 헤더에 따라 분기문을 줘서 다시 데이터 부분을 받고 그에따른 처리를 하는 방식입니다.
(Header 받을때 Body 부분을 Recv 하지 않는 이유는 Header 에 따라 Body 부분의 크기(구조체)가 달라져서입니다.)
send(Header); send(Body);
클라이언트는 이미 connect 가 되어 있다고 가정하고 위와같이 header 부분과 body 부분을 연달아 서버에게 send 합니다.
그런데 문제는 서버가 비동기 처리다보니 recv 할때 기다리지 않고 리턴을 해버리니 client 에서 패킷을 보내는 속도가 좀 늦어지면
서버는 body 부분의(서버 소스에서 PacketParse() 함수) recv 를 그냥 건너 뛰어버립니다.
이런 문제는 어떻게 해결하는게 좋을까요??
Forums:
간단히 header에서 지정한 body 크기만큼 받을
간단히 header에서 지정한 body 크기만큼 받을 때까지는 패킷을 넘기지 않으면 되겠네요.
댓글 달기