Q&A

  • 인디 idftp 사용시 에러처리에 관한 질문입니다.
with idFTP1 do begin
                Host := IP;
                PORT := StrToInt(PT);
                Username := ID;
                Password := PASS;
                try
                    Connect(true,7000);     ------①
                    //Connect();              ------②
                Except
                    on EIdSocketError do begin ------③
                    Application.MessageBox( '서버를 찾을수 없습니다', '에러',MB_ICONERROR+MB_OK );
                    AllBtnOn;
                    P_send.Visible := False;
                    exit;
                    end;
                end;

제가 한 코딩입니다..

ftp로 파일을 업로드 시키는 구문이죠..

문제는 ftp서버로 인하여 접속이 안될 경우 에러를 터뜨리고 싶은데요..

③같은 코딩을 하였기에(이곳에 질문해서 얻은 코딩입니다^^)
①,②중 ②와 같이 connect();하였을경우

※참조 : connect함수 이렇습니다.
procedure TIdFTP.Connect(AAutoLogin: boolean = True;
  const ATimeout: Integer = IdTimeoutDefault);

시간이 디폴트로 먹어서 (-1이더군요)
한 20초 정도 지난후에 제가 지정한 에러메세지가 뜹니다.

그리하여 ①과 같이 시간을 지정 (7000은 7초입니다)하였더니

7초후 제가 지정한 에러가 아닌 CONNECT TIME OUT이라는 영문 에러가 뜹니다.

그 영문 에러띄우는곳을 찾아보려고 아무리 찾아봐도 못찾았습니다..

디폴트시간을 주었을때는 아주 긴시간후 소켓에러를 발생하여 제가 코딩한 에러가 뜨는데... 시간을 지정해주면 영문에러가 뜹니다...

제가 지정한 에러를 뜨게 해주는 방법 없을까요???


부탁드립니다...

1  COMMENTS
  • Profile
    최용일 2003.06.12 20:30
    안녕하세요. 최용일입니다.

    Connect할때 발생되는 예외는 여러가지가 있습니다. EIdSocketError말고도 님같은 상황에서 타임아웃이 발생할때 나는 EIdConnectTimeout 예외, 이미 연결된 서버에 또 다시 연결할 때 발생하는 EIdAlreadyConnected예외등등 많이 있습니다...

    이런 여러가지 예외를 한꺼번에 다 처리하실려면 EIdSocketError말고 Indy클래스 모든 예외의 조상이 되는 EIdException을 이용하세요...

    try
        ......
        Connect(True, 7000);
    except
        on EIdException do
        begin
            Application.MessageBox('...');
        end;
    end;

    ^^ 항상 즐코하세요...