我使用tidftp写一个每5分钟运行一次的ftp上传及下载程序,发现查不多隔一段时间程序就要停止运行,时间间隔不一定,而且老是停止在获取当前文件夹下的所有文件名这里,代码如下:dm.IdFTP1.List(FileList,'',false);我也曾经试过dm.IdFTP1.List(FileList,'*.*',false);也有同样的问题。不知道诸位大虾有没有碰到过这种情况?
我猜测可能是网络速度慢的原因,有没有什么办法可以在规定的时间后自动断开连接。

解决方案 »

  1.   

    升级你的Indy 试下,可能是版本问题...connect的时候不是有个超时设置吗?
    Connect(True,TimeOut);
      

  2.   

    我已经将indy升级到了indy9.0.19,还是由上述问题
      

  3.   

    和你的服务器段的FTP软件有关,看看他是不是用的SERV_U
    改换IIS试试!
      

  4.   

    Indy9有9.0.19??
    目前官方都是9.0.18的哦定一个超时控制嘛,出现问题就重新连接
      

  5.   

    to 9607gfg:
      服务器在台湾,是客户的,我们没有办法换掉服务器段的ftp软件to ly_liuyang:
      你说的超时控制指的是Connect(AAutoLogin: boolean; const ATimeout: Integer)里的ATimeout么?我的程序已经执行connect成功了,但是在执行list的时候死机,设置这个timeout有用么?
      

  6.   

    我也写过FTP文件传输
    当时,服务器端用的时SERV_U,我当时也能连接成功,但是一List就不响应了。我用SOCKET 直接发送请求过去,也是类似情况。后来让他把SERV_U给换成IIS的FTP,情况就解决了!可能因为人家的FTP做了一些限制,比如带宽等。
    你不妨问问人家的系统管理员。
      

  7.   

    可以写在一个线程式里面, 不会动的时候把那个线程强制Free掉就可以了。
      

  8.   

    本来对于客户台湾的那台ftp服务器,在我把代码改成IdFTP1.List(nil);后就没有问题了,可是最近客户又上了一个日本的ftp服务器,用的是unix服务器,oracle的ftp服务器软件,这次又不行了,我测试了一下又是在list命令上死了,以下是跟踪情况。
    Resolving hostname ****.*****.***.****.
    Connecting to ip地址
    Connected.
    <<- 2005-12-20 23:31:12    220-extended FTP [PIPELINE] (1) (FTP地址)
    220- (FTP地址)/**.**.**.** Oracle Internet File System FTP Server 9.0.2.2.0
    220
    ->> 2005-12-20 23:31:12    USER 用户名
    <<- 2005-12-20 23:31:13    331 Password required for 用户名.
    ->> 2005-12-20 23:31:13    PASS 密码
    <<- 2005-12-20 23:31:14    230 User 用户名logged in.
    ->> 2005-12-20 23:31:14    TYPE A
    <<- 2005-12-20 23:31:15    200 TYPE set to A.
    ->> 2005-12-20 23:31:15    SYST
    <<- 2005-12-20 23:31:16    215 UNIX system type.
    Connection established
    ->> 2005-12-20 23:31:16    CWD 目录
    <<- 2005-12-20 23:31:16    250 CWD Command successful.
    Starting FTP transfer
    ->> 2005-12-20 23:31:16    PORT 本机ip,18,117
    <<- 2005-12-20 23:31:18    200 PORT Command successful.
    ->> 2005-12-20 23:31:18    LIST
    <<- 2005-12-20 23:31:18    150 ASCII data connection for /bin/ls (ftp地址/***.**.**.**.**.**) (0 bytes).我测试了一下,设置IdFTP1.passive:=true;使用被动模式不死了,问题是我同事用java写的ftp连接程序使用org.apache.commons.net.ftp.FTPClient类就没有问题,采用的是该类的默认的标准模式,郁闷中阿!!!!!
      

  9.   

    另外,在标准模式下也不是每次list都会死机
      

  10.   

    建议自己认真Debug的
    可能是Indy有点小问题需要修正没什么好郁闷的,记住,控件本身也是可能有Bug的,所以Debug需要进入到控件源码上!
      

  11.   

    没有办法单步调试,在公司的网络环境下一切正常,只有在客户的服务器环境下才会出现问题,我总不能到客户的服务器上装delphi然后单步调试。