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
[15037] 인디(Indy) 잘 되나요?
고등어 [earthy] 1329 읽음    2002-01-26 16:58
안녕하세요?

전 BCB4.0과 Indy 9.0.3B 를 사용하여 Application 서버를 작성하려다가
몇가지 컴파일 에러와 뉴스그룹에 올라와 있는 많은 버그관련 문의에 놀라서
후다닥 정리를 하구서 델파이로 다시 시작했습니다.

BCB+Indy로 안정적인 개발이 가능한지 궁금합니다.

그리고 질문하시 내용에 대해서는...
제 생각으로는 각 연결시 생성되는 thread에서 자신의 파일전송 윈도우를 생성해 주신 후에
파일 전송 중에 update를 해주시는면 되지 않을까 생각됩니다.

  FileServerExecute   : 새로 접속한 연결에 대한 AThread가 생성됨
      - Tfilereceiverform pfrf = new Tfilereceiverform  : 해당 클라이언트에 대한 윈도우 생성
      - 파일을 전송하는 중에 pfrf를 update함.
 

VCL Thread에서 파일 전송 윈도우들을 관리해야할 필요가 있다면
파일 전송 윈도우들의 Pool을 만들어서 각 thread에서 하나씩 받아오는
윈도우 관리자를 만드시면 어떨지요...
윈도우 관리자에서는 각 thread별로 생성된 윈도우와 thread id의 쌍을 이용하여
해당 thread에서 요청이 올때 적절한 윈도우를 return하면 될 듯 합니다.

그럼.. 부족하나마 도움이 되었기를 바랍니다.


인디가 미워-.-; 님이 쓰신 글 :
: 안녕하세요...
: 인디를 사용해서 파일전송을 하고 있습니다.. 서버쪽에서는 클라이언트가 보내는 파일을 받아서
: 창을 하나 띄우고 프로그래스 바등을 사용해서 진행상황을 보여줍니다...
:
: 그런데 인디컴포넌트가 생겨 먹은것이..
:
: void __fastcall TdmServer::FileServerExecute(TIdPeerThread *AThread)
: {
: }
:
: 이런 형태로 OnExecute 이벤트 안에서 처리를 하도록 되어 각 Thread 별로 처리를 하니까..
: 파일 전송부분은 잘되는데.. 문제는 각 Thread 별로 하나씩 띄워진 창을 어떻게 알수가 있는지
: 궁금합니다...
:
: AThread->Synchronize( UpdateUI );
:
: 이런형태로 해서 UpdaeUI 함수에서 처리를 하려고도 해 봤지만 UpdateUI 라는 함수가 인자를
: 포함하지 못하게 되어있지 않습니까..? 이 함수가 인자를 포함하고 있지 못하는데 어떻게 여러개의
: 창들중에서 지금 내가 전송 받고 있는 각 Thread 들과 창들간을 연결해서 진행상황등을 보여줄수
: 있는지 궁금합니다.. 이궁 말을 잘 못해서리 이해가 잘 되셨는지... -.-;
:
: 현재 저는 DataModule 위에 IndyTcpServer 컴포넌트를 올려놓고.. 이 Server Component 의 OnExcute 이벤트에서 파일 전송을 담당하고 있습니다... 간략하게 소스를 올려보겠습니다..
:
: Tfilereceiverform   *pfilereceiverwindow = NULL; 
:
: void __fastcall TdmServer::FileServerExecute(TIdPeerThread *AThread)
: {
:     char                pBuff[MAX_BUFFER];   
:
:     try
:     {
:         AThread->Connection->ReadBuffer( pBuff, MAX_BUFFER );
:     }
:     catch( ... )
:     {
:     }
:
:     if( strlen( pBuff ) > 0 )
:     {
:         for( int i = 0; i < ((TfrmMainForm*)Owner)->m_plstFileReceiverWindow->Count; i++ )
:         {
:             pfilereceiverwindow = (Tfilereceiverform*)((TfrmMainForm*)Owner)->m_plstFileReceiverWindow->Items[i];
:             if( pfilereceiverwindow->GetRemoteIP() == AThread->Connection->Binding->PeerIP )
:                 break;
:         }
:
:         if( !pfilereceiverwindow ) return;
:         TFileStream* pStream = new TFileStream( pfilereceiverwindow->GetReceiveFileName(), fmCreate );
:         pStream->Seek( 0, soFromBeginning );
:
:         while( true )
:         {
:             if( !pfilereceiverwindow->IsReceiveDone() )
:             {
:                 pfilereceiverwindow->m_ireceivesize += pStream->Write( pBuff, MAX_BUFFER );
:                 AThread->Synchronize( UpdateUI );
:                 try
:                 {
:                     AThread->Connection->ReadBuffer( pBuff, MAX_BUFFER );
:                 }
:                 catch( ... )
:                 {
:                 }
:             }
:         }
:
:         delete pStream;
:         pfilereceiverwindow->FileReceiveDone();
:     }
: }
: //---------------------------------------------------------------------------
: void __fastcall TIdSocket::UpdateUI()
: {
:     pfilereceiverwindow->pbFileReceiver->Position =
:                            pfilereceiverwindow->pbFileReceiver->Position + MAX_BUFFER;
:     pfilereceiverwindow->Caption = "파일 전송 중";
: }
:
: 위와 같은데요.. 만약에 전송이 한곳에서만 이루어 지고 있다면 상관이 없겠지만 하나가 전송하고 있는데 또 다른 곳에서 전송을 시작하게 되면 pfilereceiverwindow 라는 포인터의 값이 바뀔것이고 그렇게 되면 이전에 전송 받고 있던 내용도 영향을 받을 거 같은데요...
:
: 이런 문제를 어떻게 해결해야 할지...
:
: 그러니까.. 제 요지는
:
: Indy 를 사용해서 여러명의 사용자들로 부터 파일전송을 받고 각 사용자들과의 파일전송 진행상황을 창을 통해서 보여주고 싶은데 어떻게 해야할까요... 이게 궁금합니다...
: 고수님들의 도움을 기다리겠습니다.. 감사합니다..
:
: 참고로 전 DLL 로 작업을 하고 있습니다..

+ -

관련 글 리스트
15035 인디 TCPServer 에서 Synchronize 문제... 인디가 미워-.-; 1511 2002/01/26
15037     인디(Indy) 잘 되나요? 고등어 1329 2002/01/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.