|
인디는 검증된 컴포넌트라고 생각했었는데..ㅡ.ㅡ
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;
: : }
|