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
[53767] Re:Re:암울하네요..ㅡ.ㅡ
DoyongID [doyongid] 1557 읽음    2008-06-25 10:44
인디는 검증된 컴포넌트라고 생각했었는데..ㅡ.ㅡ

Timeout 방식을 써야겠네요.. 감사합니다..

정재만 님이 쓰신 글 :
: 저도 전에 이것 때문에 무척 고생한적이 있읍니다.
:
: BDS2007 Indy10만에 문제가 아니라 indy FTP자체의 문제 같읍니다.
:
: 많은수의 파일을 Get,Put등로 업/다운시 어느순간 멈추어 버리는 현상이 있읍니다.
:
: 리턴값이나 Exeception이 나오면 에러로 처리해서 넘어가는데 아에 멈쳐버리니 정말 돌아가시죠....
:
: 원인은 일시적인 네트워크장애나 원인모를 장애인데 저는  네트워크로 보고 있읍니다.
:                                                                            (특히 네트워크망이 복잡하게 얽혀 있을때)
:
: 해결책은  indyFTP대신에 순수API(혹은 MFC)로 구현된 FTP소스를 구해 사용한다. (리턴값은 온다)
:
: indyFTP은 꼭 사용해야 된다면 get,put동작을 감시하는 타이머나 쓰레드로 Timeout처리한다
:
: 타이머시작       ->     타이머 => 3분설정(Abort호출 후 Disconnect시킴)
: get
: 타이머종료
: Timeout처리후 재접속하여 get/put을 처리한다.
:
: 그럼 도움이 되었으면 하네요~~~~~
:
:
:
: DoyongID 님이 쓰신 글 :
: : 인디10이고요.... 총 1.6기가 정도의 파일을 FTP로부터 받고요.. 파일갯수는 2600여개 됩니다..
: :
: : 그런데, 받다가 어느 순간이 되면(유동적)...
: :
: : 그냥 다운로드가 멈춰버립니다.. 예외처리로 검출되는 에러도 없고요..
: :
: : 메시지를 찍어보니 Get()에서 멈춥니다.. Get()에서 빠져나오지 못하고요.. 해당 파일은 0바이트로 저장됩니다..
: :
: : OnStatus()에서 메시지를 찍어보니 "Starting FTP transfer."가 찍히고, 한참 있다가 "Transfer complete."라고 찍히고 그걸로 끝입니다..
: :
: : 왜 그럴까요? 소스가 지저분하지만 다운로드하는 소스는 아래와 같습니다..
: :
: : bool TUpdate::DownloadFile(void)
: : {
: :     int     i, Count = 0;
: :     char    DownDirName[1024], DownFileName[1024], SaveFileName[1024];
: :     TFileStream *clFs;
: :
: :     // 다운받을 총 파일 용량 대입
: :     Synchronize(&ApplyTotalSize);
: :
: :     for(i = 0; i < DownCount; i++)
: :     {
: :         sprintf(DownFileName, "/%s/Version/%d/%s", exGameName.c_str(), DownList[i].Version, DownList[i].FileName);
: :         sprintf(SaveFileName, "%sPatch\\%s", (exInstallPath + "\\" + exGameName + "\\").c_str(), DownList[i].FileName);
: :
: :         // 현재 총 다운로드 파일 갯수 누적
: :         CurrCount++;
: :
: :         // 현재 받고 있는 파일명
: :         CurrentFileName = DownList[i].FileName;
: :
: : ReDown:
: :         if(Count > 100)
: :         {
: :             RemoveFile();
: :
: :             return false;
: :         }
: :
: :         try
: :         {
: :             CurrentFileName = DownFileName;
: :             CurrentFileSize = DownList[i].FileSize;
: :
: :             // 현재 다운받는 파일 용량 대입
: :             Synchronize(&ApplyFileSize);
: :
: :             if(Win_Main->Bar_File->MaxValue == 0)
: :             {
: :                 Count++;
: :
: :                 printf("TUpdate::DownloadFile1() - Count : %d\n", Count);
: :
: :                 goto ReDown;
: :             }
: :
: :             // 다운로드 시작
: :             printf("Down(%d) : %s\n", i, DownFileName);
: :             Win_Main->FTP_Update->Get(DownFileName, SaveFileName, true, false);
: :
: :             // 현재 총 다운로드 용량 누적
: :             CurrByte += Win_Main->Bar_File->MaxValue;
: :
: :             Count   = 0;
: :         }
: :         catch(Exception &e)
: :         {
: :             Count++;
: :
: :             printf("TUpdate::DownloadFile2() - Count : %d, Msg : %s\n", Count, e.Message.c_str());
: :
: :             goto ReDown;
: :         }
: :     }
: :
: :     return true;
: : }

+ -

관련 글 리스트
53761 BDS2007의 Indy FTP 다운로드 문제.. DoyongID 1495 2008/06/25
53764     Re:BDS2007의 Indy FTP 다운로드 문제.. 정재만 2099 2008/06/25
53767         Re:Re:암울하네요..ㅡ.ㅡ DoyongID 1557 2008/06/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.