TCP로 데이터를 받을때...
글쓴이: declspec / 작성시간: 화, 2012/12/18 - 8:31오후
recv 함수를 1회 호출할때 소켓에서 받고자 하는 바이트의 수를 지정하는건
최대 그만큼까지 받게될뿐 몇바이트를 수신할지는 알수가 없습니다, 보장이 안되죠..
그렇다고해서 정확히 원하는 바이트수만큼을 recv 를 반복호출하여 수신하고자 한다면
그만큼이 수신될때까지 recv 부분에서 block이 되겠죠
만약 일정 시간동안 받을수있는만큼 데이터를 recv 로 받고
그 시간이 지나면 흐름이 넘어가게 하고싶은데
이 경우 어떻게 구현하는게 가장 효과적일까요?
recv 에 타이머 지정하는건, 그 사이에 데이터가 없을경우 넘어가는거라
제 의도에는 잘 안맞는듯한데..
Forums:
sigaction으로 oob를 보내는 방법 같은데요.
ㅇ_ㅇ''' 제가 확인은 안해봤습니다.
윤성우씨저 TCP/IP 소켓 프로그래밍 보면. 그에 대한 내용이 나와있습니다.
메시지 블록 되지 않게요.
recv이후에는. 데이터 받은값을 일정값의 크기가 될때까지 queue에 넣고.
struct등으로 잘라서 사용하는 방식을 사용하기도 합니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
이건 어떤가요?
select()함수 이용하면 쉬울것 같습니다.
timeout 인 경우에 다시 recv를 호출하거나.. 다른 액션을 취하면 될 것 같구요..
그리고 recv timeout인 경우에도 마찬가지로 recv를 다시 호출 하면 될 것 같네요.. (?)
TCP 말 그대로 스트림으로 전송이 되므로, 전송되는 바이트 수에 대해서 서버 클라이언트간에...
특정 사이즈대로 송수신을 하거나, 아니면.. 송수신간에 프로토콜 설계가 필수적입니다.
예를들면... MSG head를 만든 후... type 또는 length 필드를 두면 될것 같네요..
The ***er you become, the more you are able to ***.
댓글 달기