소켓 프로그램을 짜고 있는데...
서버에서 recv를 써 데이터를 읽고 있습니다.
근데 데이터를 읽을 때 가끔씩 데이터를 다 읽지 못해서 데이터가 깨지는 경우가 생기거든요...
예를 들어 128byte를 보냈는데 64byte만 읽어 버려서 제대로 데이터가 재생이 안되어서요...
어떻게 해야 되죠...
tcp를 사용하고 있습니다.
검색해보시고...
한 가지 유의하셔야 할 점은
socket 프로그래밍에서 절대 양쪽이 동기화될 것이라고 생각하시면 안됩니다. A가 send(100) 했을 때 B가 recv(100) 한다고 해서
B가 100 바이트를 받는 것은 (물론 그런 경우도 있지만)아니라는 얘기입니다.
나머지는 검색해보시면 엄청 나올 겁니다.
소켓 버퍼의 용량이 혹시 65536아닐까요?
용모수려 재색겸비
논블러킹 상태라면 recv에서 꼭 100 byte 읽어들이지 않습니다. 네트워크에 지연따른 딜레이도 있기 때문에 온 만큼만 읽어 들이는거죠 ^^; 그래서 정확하게 얼마나 오는지 계속 체크를 해야 합니다.
블러킹 상태라면 내가 원하는 용량이 되어야 해제 되므로 그때는 정확하게 100byte 읽어 들이는 거죠.^^;
블러킹일 경우는 문제가 생기면 계속 프로세스를 잡고 있는게 문제죠 ^^;
하여간 여기서 더 찾아보시면 더 많은 내용들을 찾을 수 있을것입니다.
그럼
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
아래 무수하게 많은 관련 질문답변이 있으니..
검색해보시고...
한 가지 유의하셔야 할 점은
socket 프로그래밍에서 절대 양쪽이 동기화될 것이라고 생각하시면 안됩니다.
A가 send(100) 했을 때
B가 recv(100) 한다고 해서
B가 100 바이트를 받는 것은 (물론 그런 경우도 있지만)아니라는 얘기입니다.
나머지는 검색해보시면 엄청 나올 겁니다.
저랑 비슷한 고민을 하고 계시는군요
소켓 버퍼의 용량이 혹시 65536아닐까요?
용모수려 재색겸비
참조
논블러킹 상태라면 recv에서 꼭 100 byte 읽어들이지 않습니다.
네트워크에 지연따른 딜레이도 있기 때문에 온 만큼만 읽어 들이는거죠 ^^;
그래서 정확하게 얼마나 오는지 계속 체크를 해야 합니다.
블러킹 상태라면 내가 원하는 용량이 되어야 해제 되므로 그때는 정확하게
100byte 읽어 들이는 거죠.^^;
블러킹일 경우는 문제가 생기면 계속 프로세스를 잡고 있는게 문제죠 ^^;
하여간 여기서 더 찾아보시면 더 많은 내용들을 찾을 수 있을것입니다.
그럼
댓글 달기