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
[63007] 인디소켓에 질문입니다.
알론소 [smire4454] 1301 읽음    2010-11-12 10:04
소켓 컴포넌트쓰지않구요 그냥

    TIdTCPClient    *IdTCPClient;
이렇게 선언해서 인디클라이언트 소켓사용하고있는데요
문제는 send한다음에 receive할때 문젠대요

보통
    try
    {
        iStackSize = IdTCPClient->ReadFromStack();
        iStackBufSize = IdTCPClient->InputBuffer->Size;

        if(iStackBufSize > 0)
        {
            IdTCPClient->ReadBuffer(cRecvBuf, iStackBufSize);
            memcpy(Buf, cRecvBuf, iStackBufSize);
        }  //end of if
        else
            return;

    }  //end of try
    catch ( Exception &e )
    {
        if(iStackBufSize == 0)
        {
            return;
        }

        Thread_Exit();
        return;
    }



이런식으로해서 받는부분 처리하고있는대요
원래는 보통 패킷주고받을때 데이터 사이즈를 모르니까
앞부분에 데이터사이즈를 넣어서 데이터사이즈만큼 받잖아요
근데 데이터사이즈를 안넣어주겠다고해서
그럼 어떻게 데이터사이즈만큼 받지하고 생각하고
검색하고 그러다가

IdTCPClient->InputBuffer->Size
있다는걸알게되었어요
만약에 데이터사이즈를 아는 함수나 속성이 있다면
좋은데 아무리 찾아봐도 없고 인디소켓같은경우는 저렇게 InputBuffer를
사용해야한다고 그러더라구요

그래서 이걸어떻게 사용하지 이리저러
막 쓰다가 결국엔 저렇게 코드를 짜버렸는데
문제는
그냥 보통 100바이트 안넘는걸 주로받거든요

간혹 근데 8000바이트조금넘는 데이터를 받는경우가있어요
근데 어떨땐 8000이 한번에 들어오는경우가있던데
어떨땐 1400바이트 그리고 나머지 6600바이트
이런식으로 두번나눠서 들어오는경우가있는거에요

그래서 제가 어거지로

        iStackSize = IdTCPClient->ReadFromStack();
        iStackBufSize = IdTCPClient->InputBuffer->Size;

이부분을 밑에 또썼거든요

전 만약에 두번나눠서 들어온다면 소켓이알아서
다처리해줄줄알았는데

저위에 제가 짜논걸로하니깐
1400바이트만 들어오고 뭐 또 반응도안하고
계속 밑으로 쭉쭉 내려가는거에요


그래서 밑에 ETX까지들어왔는지 돌리는 루프가있는데
1400까지만들어오면 아직 데이터가 완벽하지않으니
없잖아요 뒤에 데이터에있지

그래서 데이터를 완전하게 받질못하는거에요
그냥 반토막난 데이터만받고 끝나구...

어떻게 해야하나요
제가 혹시 저기 코드를 잘못짰나요??
어떻게해야하죠...

+ -

관련 글 리스트
63007 인디소켓에 질문입니다. 알론소 1301 2010/11/12
63008     Re:인디소켓에 질문입니다. Lyn 1387 2010/11/12
63012         Re:Re:인디소켓에 질문입니다. 알론소 1017 2010/11/12
63013             Re:Re:Re:인디소켓에 질문입니다. Lyn 1268 2010/11/12
63014                 네감사합니다.. 알론소 947 2010/11/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.