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
[52293] TServerClientThread에서 4천건정도 접속하면 다음부터 접속이 안되네요...소스 좀 봐주세요...ㅠㅠ
역삼골 [saonara] 2388 읽음    2008-02-15 18:54
왜 4천건정도 접속 후에 접속이 않됩니다.
서버 소켓을 클로즈하고 접속하면 다시 또 접속은 되지만 또 4천 후면 접속이 않되네요.
왜 그런지 모르겠습니다.

테스트용 프로그램을 만들어서 계속 접속하고 해제하고 반복해서 돌리고 있습니다.

//---------------------------------------------------------------------------
//Socket Thread Create Event
//---------------------------------------------------------------------------
void __fastcall Tfkmsmain::AuthServerSocketGetThread(TObject *Sender,
      TServerClientWinSocket *ClientSocket,
      TServerClientThread *&SocketThread)
{
    try
    {
    //TServerClientThread 를 생성
    SocketThread = new TServerSocketThread(false, ClientSocket);
    }
    //Excetion process
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
    }
}

//---------------------------------------------------------------------------
//Thread Start Event
//---------------------------------------------------------------------------
void __fastcall Tfkmsmain::AuthServerSocketThreadStart(TObject *Sender,
      TServerClientThread *Thread)
{
    //Thread Object, Socket handle Insert
    ThreadObjectCombo->Items->AddObject(IntToStr(Thread->ThreadID), Thread);
    Label1->Caption = IntToStr(StrToInt(Label1->Caption) + 1);
}

//---------------------------------------------------------------------------
//Socket Thread End Event
//---------------------------------------------------------------------------
void __fastcall Tfkmsmain::AuthServerSocketThreadEnd(TObject *Sender,
      TServerClientThread *Thread)
{
    Thread->Terminate();
   
    //Close Socket Handle Search
    int nObjectIndex = ThreadObjectCombo->Items->IndexOf(IntToStr(Thread->ThreadID));
    if (nObjectIndex >= 0) ThreadObjectCombo->Items->Delete(nObjectIndex);
    Label2->Caption = IntToStr(StrToInt(Label2->Caption) + 2);
}

void __fastcall TServerSocketThread::ClientExecute(void)
{
    TWinSocketStream *pStream = 0;
    BYTE bReceiveBuffer[65536] = {0x00,},
        bSendBuffer[65536] = {0x00,};
    long nReceiveBufferLen = 0,
        nSendBufferLen = 0;
    long nWaitingTime = 0;
    SYSTEM_WORK_INFO tSystemWorkInfo;
    int nWaitTimeOut = 60000;   //ms
    bool bFirstMsgRcv = true;

    //Socket Handle save
    nSocketHandle = ClientSocket->SocketHandle;

     //System Work Information Structure Reset
    memset((char*)&tSystemWorkInfo, 0x00, sizeof(SYSTEM_WORK_INFO));

try
{
    //TWinSocketStream is a stream that provides services which allow
    //applications to read from or write to socket connections.
    pStream = new TWinSocketStream(ClientSocket, 60000);

    //Waiting condition : not Time Out, not Terminate, not Socket Disconnect
    while(!Terminated && ClientSocket->Connected)                     //nWaitingTime < nSocketTimeOut &&
    {
        //Waits up to TimeOut milliseconds for the socket connection to be ready to transfer data.
        //Application->ProcessMessages();
        if(pStream->WaitForData(nWaitTimeOut))
        {
            //
            //Thread Blocking mode then read(void*,int) function use
            //
            //Reads up to Count bytes from the socket connection into Buffer.
            if (Terminated || !ClientSocket->Connected) break;

            try
            {
            //Read Buffer
            memset(bReceiveBuffer, 0, sizeof(bReceiveBuffer));
            nReceiveBufferLen = pStream->Read(bReceiveBuffer, sizeof(bReceiveBuffer));
            }//try
            catch (Exception &E)
            {
            HandleException();
            }
            if (nReceiveBufferLen == 0) break;
            else
            {                               
                //CHIP Process Request
                nWaitingTime = 0;
                memset(bSendBuffer, 0x00, sizeof(bSendBuffer));
                memset(tSystemWorkInfo.cWorkResult, 0x00, sizeof(tSystemWorkInfo.cWorkResult));
                epassclass->InferfaceMain(&tSystemWorkInfo, bReceiveBuffer, nReceiveBufferLen, bSendBuffer, &nSendBufferLen);

                //Client Socket Send Buffer
                pStream->Write(bSendBuffer, nSendBufferLen);
            }
        }
       
        //Delay time
        Sleep(10);
    }
  
    //Client Socket Close
    ClientSocket->Close();

    //Stream free
    delete pStream;
}
//Excetion process
__except(EXCEPTION_EXECUTE_HANDLER)
{
    //Client Socket Disconnect
    ClientSocket->Close();

    //Stream free
     delete pStream;
}
}

+ -

관련 글 리스트
52293 TServerClientThread에서 4천건정도 접속하면 다음부터 접속이 안되네요...소스 좀 봐주세요...ㅠㅠ 역삼골 2388 2008/02/15
52298     Re:TServerClientThread에서 4천건정도 접속하면 다음부터 접속이 안되네요...소스 좀 봐주세요...ㅠㅠ 김호광 2251 2008/02/15
52294     Re:TServerClientThread에서 4천건정도 접속하면 다음부터 접속이 안되네요...소스 좀 봐주세요...ㅠㅠ 장성호 2823 2008/02/15
52295         장성호님 죄송한데 한가지만 더 여쭤보겠습니다. ^^ 역삼골 1938 2008/02/15
52296             클라이언트 테스트 프로그램에 문제가 있었네요..^^;; 역삼골 1984 2008/02/15
52299                 Re:클라이언트 테스트 프로그램에 문제가 있었네요..^^;; 김태선 2734 2008/02/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.