델파이에서 널리 사용되는 컴퍼넌트인 Indy...
그동안 Indy9를 사용하다가, 사내 프로젝트를 수행하면서 다른 팀원들이 이미 Indy10으로 진행을 하고 있어서 어쩔 수 없이 나도 Indy10으로의 전향....
헌데 Indy10 FTP 컴퍼넌트를 이용하여 FTP Server에 업로드를 하는 경우에, 일부 FTP 서버에서 Connect 부분에서 "Freeze" 현상이 발생하였다.
하여 소스를 디버깅 하던중에
IDFTP.PAS에서
FCapabilities.Clear;
{Capabilities.AddStrings( LastCmdResult.Text );
//we remove the first and last lines because we only want the list
if FCapabilities.Count > 0 then
begin
FCapabilities.Delete(0);
end;
if FCapabilities.Count > 0 then
begin
FCapabilities.Delete( FCapabilities.Count -1 );
end;
위의 부분이 Indy9와 다른점을 발견.... FTP Protocol인 "FEAT"명령어를 FTP Server에서 제대로 처리해주지 못해 발생하는 오류(?)인것으로 판단됐다.
FTP 서버를 Server-U를 사용하고 있고, 두개의 서버가 동일한 버전으로 운영되고 있음에도 불구하고, 한쪽은 되고 다른 한쪽은 오류가 나는 어처구니 없는 상황.....
telnet을 통해 FTP Command를 하나하나 날려보니 한쪽 FTP 서버에서는 "FEAT"명령어의 Response가 날아오지 않았고, Indy10 FTP 컴퍼넌트에서는 이때문에 프로그램이 얼어버리는 현상으로 비춰진 것이다.
정상적인 FTP 서버라면 아래와 같이 나와주어야 한다.
211-Extension supported
CLNT
MDTM
MDTM YYYYMMDDHHMMSS[+-TZ];filename
SIZE
SITE PSWD;EXEC;SET;INDEX;ZONE;CHMOD;MSG
REST STREAM
XCRC filename;start;end
MODE Z
211 End
RFC 문서 링크 : http://incubator.apache.org/ftpserver/rfc2389.html
FEAT <CRLF>
This command causes the FTP server to list all new FTP features that the server supports beyond those described in RFC 959. A typical example
reply to the FEAT command might be a multi-line reply of the form:
아무튼 FEAT 명령어 자체가 FTP Command의 새로운 커맨드 리스트를 보여주는 거 같고, 사실 난 FTP로 그다지 복잡한 기능을 수행하지 않기에, 해당부분을 주석처리하여 처리하였다.
혹시라도 Indy10으로 업그레이드 한 이후에 FTP 연결이 잘 되지 않는 사용자가 있다면 해당 부분을 주석처리한 후 사용하시기 바란다.
앞서 말한 코드에서 "FCapabilities.Clear;"를 제외한 모든 부분을 주석처리!!!!