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
[28763] 소켓서버 프로그램이 메모리가 계속해서 증가합니다... 어떻게 하지요?
탱구리파파 [ed1440] 1257 읽음    2004-02-09 23:21
아래와 같이 소켓 서버 프로그램을 했는데 메모리가 계속해서 증가합니다.
도데체 이유가 뭔지 궁금합니다.
클라이언트에서는 1초에 한번씩 데이터를 전송합니다.
클라이언트 갯수는 약 20여개 정도 이고요...
이유가 멀까요.... (T.T;;)
서버는 NonBlocking 모드로 설정하였습니다...


//------------------------------------------------------------------
// Header에 선언

    TCustomWinSocket    *m_ClientSocket[DEF_MAX_SOCKET];

//------------------------------------------------------------------
// 클라이언트로 부터 접속시 처리
//------------------------------------------------------------------
void __fastcall TfrmSocketServer::ServerSocketAccept(TObject *Sender,
      TCustomWinSocket *Socket)
{
int     n;

    // 연결상태 표시
    for(n=0; n<frmTermStat->sgrdTermStat->RowCount; n++)
    {
        if (Trim(frmTermStat->sgrdTermStat->Cells[9][n]) == Trim(Socket->RemoteAddress))
        {

            if ( mb_connected[n] )  m_ClientSocket[n] = NULL;
            m_ClientSocket[n] = Socket;
            mb_connected[n]  = true;

            frmTermStat->sgrdTermStat->Cells[1][n] = DEF_TERM_CONN;

            if ( frmTermStat->sgrdTermStat->Cells[3][n] == cboTermName->Items->Strings[cboTermName->ItemIndex])
            {
                pnlTermStat->Color = clBlue;
                pnlTermStat->Font->Color = clWhite;
                pnlTermStat->Caption = "통 신 중";
            }
        }
    }

}
/* ============================== END FUNCION ============================== */

//-----------------------------------------------------------------------
// 클라이언트로부터 데이터가 전송되었을경우
//-----------------------------------------------------------------------
void __fastcall TfrmSocketServer::ServerSocketClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
int     n, i_totlen, i_recvlen;
char    c_tmpdata[2048];

    // 어느 단말의 소켓인지를 찾는다.
    memset(mc_recvdata, 0, sizeof(mc_recvdata));
    for(n=0; n<DEF_MAX_SOCKET; n++)
    {
        if ( !mb_connected[n] ) continue;

        if ( m_ClientSocket[n]->RemoteAddress == Socket->RemoteAddress )
        {
            i_totlen = Socket->ReceiveLength();
            int     i_roop_count = 0;
            for(;;)
            {
                if (i_roop_count > 10)
                {
                    // 데이터 이상 처리
                    break;
                }
                i_roop_count++;
                memset(c_tmpdata, 0, sizeof(c_tmpdata));
                try{
                    i_recvlen = Socket->ReceiveBuf(c_tmpdata, i_totlen);
                }
                catch(...)
                {
                    AnsiString s_log = "소켓IP=" + Socket->RemoteAddress;
                    frmCommon->SaveLogFile( DEF_LOG_STAT,
                                            DEF_TERM_PROCESS,
                                            "소켓수신오류",
                                            s_log);
                    TraceDataDisplay(3, -1, "소켓수신", "ERR", s_log );
                }

                if ( i_recvlen == -1 )  break;

                if ( i_recvlen >= i_totlen )
                {
                    if ( i_recvlen >= sizeof(mc_recvdata) )  i_recvlen = sizeof(mc_recvdata) - 1;

                    int i_pos = lstrlen(mc_recvdata);
                    memcpy(&mc_recvdata[i_pos], c_tmpdata, i_recvlen);

                    // 수신된 데이터 처리
                    RecvDataManageProcess(n, mc_recvdata);

                    break;
                }
                else if ( i_recvlen < i_totlen )
                {
                    i_totlen = i_totlen - i_recvlen;
                }
            }

            return;
        }
    }
}
/* ============================== END FUNCION ============================== */

+ -

관련 글 리스트
28763 소켓서버 프로그램이 메모리가 계속해서 증가합니다... 어떻게 하지요? 탱구리파파 1257 2004/02/09
34444     Re:소켓서버 프로그램이 메모리가 계속해서 증가합니다... 어떻게 하지요? 금목암 1040 2004/02/10
34443     Re:소켓서버 프로그램이 메모리가 계속해서 증가합니다... 어떻게 하지요? 신동승,無敵 1125 2004/02/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.