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
[53764] Re:BDS2007의 Indy FTP 다운로드 문제..
정재만 [csta] 2098 읽음    2008-06-25 09:23
저도 전에 이것 때문에 무척 고생한적이 있읍니다.

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 1494 2008/06/25
53764     Re:BDS2007의 Indy FTP 다운로드 문제.. 정재만 2098 2008/06/25
53767         Re:Re:암울하네요..ㅡ.ㅡ DoyongID 1557 2008/06/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.