C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[58944] Re:Re:넌블로킹 소켓 통신시 문제사항 질문
범이 [] 1530 읽음    2009-10-29 18:57
아. 그렇게 되는군요. 감사합니다.
SendBuf로 보낸 것들이 네트워크 버퍼에 남아있어서 그걸
필요한 만큼 나눠서 받을 수 있다는 말씀이군요..

한번 테스트를 해봐야겠네요
감사합니다 ^^*

아제나 님이 쓰신 글 :
: 이 문제는 TCP의 특성 때문에 생기는 문제입니다. 블럭킹/넌블럭킹과는 상관없고요.
:
: TCP가 스트림 기반이기 때문에, 데이터가 전송측에서 보낸 만큼 오는게 아니라 네트워크 상황에 따라서
: 네트워크 장치에 수신된 만큼만 리턴을 해주게 됩니다.
:
: 예를 들어서, 송신측에서, 100 바이트, 100 바이트, 100 바이트, 이렇게 3번을 보냈다면
:
: 수신측에서는 한꺼번에 300 바이트를 읽는 경우도 있으며, 150씩 2번에 나뉘어져 받을 수도 있습니다.
: 네트워크가 무진장 느리다면 30바이트, 20바이트, 50바이트, 이런식으로 잘게 나뉘어져 오는 경우도 있어요.
:
: 그러니까 처리할 때 nRcvLen 만큼 한꺼번에 읽어들이면 안 되고,
: 처리에 필요한 만큼 수신 되었는지 수신 크기를 확인하고 ReceiveBuf 에 사용할 만큼만 수신해서
: 나머지는 그냥 네트워크 버퍼에 남겨두어야 합니다.
:
: 그럼 좋은 프로그램 만드세요~
:
:
: lucyfer 님이 쓰신 글 :
: : TServerSocket을 사용하고 있구요.
: :
: : ClientRead 이벤트에서 다음과 같이 처리를 하고 있습니다.
: :
: :     int nRcvLen = Socket->ReceiveLength();
: :     if(nRcvLen > 0)
: :     {
: :         JOB_PACKET  Job_Msg = {0,};
: :         char Buffer[2048] = {0,};
: :
: :         Socket->ReceiveBuf(Buffer, nRcvLen);
: :         memcpy(&Job_Msg, Buffer, sizeof(JOB_PACKET));
: :
: :         if(Job_Msg.Magic == 'TEST')
: :         {
: :             String Test1= (String)Job_Msg.test1;
: :             String Test2= (String)Job_Msg.test2;
: :             String Test3= (String)Job_Msg.test3;
: :             String Test4= (String)Job_Msg.test4;
: :
: :             Memo1->Lines->Add(Test1 + Test2 + Test3 + Test4);
: :         }
: :     }
: :
: : 클라이언트에서 SendBuf 로 보내게 되는데. 이때 버튼 다운이벤트에 1개씩 보내거나,
: : 보내고 슬립을 주고 다음 보내고 하는 건 문제 없이 잘 통신이 됩니다.
: :
: : 그러나, SendBuf 후 바로 SendBuf를 보내게 되면 다음에 보내게 된것은 받아서 처리를 못하며,
: : 이렇게 연속으로 보내게 되면 서버가 종료되는 문제가 발생합니다.
: : 에러가 발생하는 부분은 memcpy(&Job_Msg, Buffer, sizeof(JOB_PACKET)); 부분으로
: : 작업중인 메모리를 복사하는 것때문에 그렇지 않을까 생각을 하는데.
: : 이부분을 어떻게 수정을 해야 좋을지 지혜를 구해봅니다.
: :
: : 감사합니다.

+ -

관련 글 리스트
58939 넌블로킹 소켓 통신시 문제사항 질문 lucyfer 1179 2009/10/29
58941     Re:넌블로킹 소켓 통신시 문제사항 질문 아제나 1297 2009/10/29
58944         Re:Re:넌블로킹 소켓 통신시 문제사항 질문 범이 1530 2009/10/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.