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
[52294] Re:TServerClientThread에서 4천건정도 접속하면 다음부터 접속이 안되네요...소스 좀 봐주세요...ㅠㅠ
장성호 [nasilso] 2822 읽음    2008-02-15 19:24
아래 팁을 참조하세요

http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=186

그럼..

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