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
[58939] 넌블로킹 소켓 통신시 문제사항 질문
lucyfer [] 1179 읽음    2009-10-29 16:52
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:넌블로킹 소켓 통신시 문제사항 질문 범이 1531 2009/10/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.