需要满足:
1、 A公司内部网访问服务器
2、 A公司服务器上网与公司分开
3、 公网IP:   222.222.222.222已经映射到A公司服务器(大楼分配ip 10.0.0.13)
4、 写字楼路由器已映射端口:10460 – 10470   到A公司服务器
5、 A公司服务器开放端口:全开
6、 A公司路由器开放端口:全开现在的问题:
我们在 A公司服务器上架设了一个FTP服务器,Ftp端口为 10460,采用被动模式,pasv 端口指定为 10461-10470.  现在我们通过FTP工具(如 CuteFtp等),能登陆FTP服务器,并且上传下载文件,通过Delphi程序则无法上传下载文件,查看 服务器日志,发现ftp 用户能够登陆ftp服务器,但是在建立数据链接时失败。
我们的Delphi程序在别的用户处工作正常,都是映射了 10460-10470端口就能正常使用。
附FTP服务器日志:用我们程序连接的,失败的日志
220 Serv-U FTP Server v6.4 for WinSock ready...
USER lzl
     331 User name okay, need password.
PASS xxxxx
     230 User logged in, proceed.
FEAT
     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
      MLST Type*;Size*;Create;Modify*;Win32.ea*;
     211 End
TYPE I
     200 Type set to I.
SYST
     215 UNIX Type: L8
SITE ZONE
     210 UTC+480
CWD 2010/10/
     250 Directory changed to /2010/10
PORT 192,168,10,199,16,85
     200 PORT Command successful.
STOR {865EAFBC-5591-47F1-AD41-4E1CEF53F5E7}.rar
     150 Opening BINARY mode data connection for {865EAFBC-5591-47F1-AD41-4E1CEF53F5E7}.rar.
     425 Cannot open data connection.用CuteFtp下载,成功的日志
     220 Serv-U FTP Server v6.4 for WinSock ready...
USER lzl
     331 User name okay, need password.
PASS xxxxx
     230 User logged in, proceed.
FEAT
     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
      MLST Type*;Size*;Create;Modify*;Win32.ea*;
     211 End
TYPE I
     200 Type set to I.
SYST
     215 UNIX Type: L8
SITE ZONE
     210 UTC+480
CWD /2010/10/
     250 Directory changed to /2010/10
SIZE {5E76CC6F-6F4B-492A-89A8-58FD2876A5DE}.rar
     213 159644
PORT 10,0,0,13,11,229
     200 PORT Command successful.
RETR {5E76CC6F-6F4B-492A-89A8-58FD2876A5DE}.rar
     150 Opening BINARY mode data connection for {5E76CC6F-6F4B-492A-89A8-58FD2876A5DE}.rar (159644 Bytes).
     226 Transfer complete.哪位兄弟熟悉这个,帮忙看看,谢谢。

解决方案 »

  1.   

    改成主动模式看看,我曾经遇到过一次,改一下自己的连接配置就可以了,如果和CuteFtp设置都一样,不应该连不上
      

  2.   

    STOR {865EAFBC-5591-47F1-AD41-4E1CEF53F5E7}.rarRETR {5E76CC6F-6F4B-492A-89A8-58FD2876A5DE}.rar两个方式不一样.换一下试试
      

  3.   

    bdmh 兄,没有用代理服务器,直接连的。
    fscnt兄,我是直接调用的 indy
          IdFTP1.Host := g_FtpHost;
          IdFTP1.Port := StrToInt(g_FtpPort) ;
          IdFTP1.Username := g_FtpUser;
          IdFTP1.Password := g_FtpPass;
          IdFTP1.Connect;
          IdFTP1.Get(sFileSrc, sFileDes, True);
      

  4.   

    是下载STOR {865EAFBC-5591-47F1-AD41-4E1CEF53F5E7}.rar
      

  5.   

    TIdFTP.Put代码是上传的
    procedure TIdFTP.Put(const ASource: TStream; const ADestFile: string = '';
      const AAppend: boolean = false);
    begin
      if length(ADestFile) = 0 then begin
        InternalPut('STOU ' + ADestFile, ASource); {Do not localize}
      end else if AAppend then begin
        InternalPut('APPE ' + ADestFile, ASource, false); {Do not localize}
      end else begin
        InternalPut('STOR ' + ADestFile, ASource); {Do not localize}
      end;
    end;
      

  6.   

    fscnt 兄,我又去抓了两个日志,分别是下载的和上传的。这是下载的日志
         220 Serv-U FTP Server v6.4 for WinSock ready...
    USER lzl
         331 User name okay, need password.
    PASS xxxxx
         230 User logged in, proceed.
    FEAT
         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
          MLST Type*;Size*;Create;Modify*;Win32.ea*;
         211 End
    TYPE I
         200 Type set to I.
    SYST
         215 UNIX Type: L8
    SITE ZONE
         210 UTC+480
    CWD /2010/10/
         250 Directory changed to /2010/10
    SIZE {3B29091A-B279-424A-A070-22EF382BED7E}.rar
         213 542075
    PORT 192,168,10,199,5,138
         200 PORT Command successful.
    RETR {3B29091A-B279-424A-A070-22EF382BED7E}.rar
         150 Opening BINARY mode data connection for {3B29091A-B279-424A-A070-22EF382BED7E}.rar (542075 Bytes).
         425 Cannot open data connection.这是提交的日志
         220 Serv-U FTP Server v6.4 for WinSock ready...
    USER lzl
         331 User name okay, need password.
    PASS xxxxx
         230 User logged in, proceed.
    FEAT
         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
          MLST Type*;Size*;Create;Modify*;Win32.ea*;
         211 End
    TYPE I
         200 Type set to I.
    SYST
         215 UNIX Type: L8
    SITE ZONE
         210 UTC+480
    CWD 2010/10/
         250 Directory changed to /2010/10
    PORT 192,168,10,199,5,166
         200 PORT Command successful.
    STOR {85582322-BA36-4DD5-B806-0D09A83ACE24}.rar
         150 Opening BINARY mode data connection for {85582322-BA36-4DD5-B806-0D09A83ACE24}.rar.
         425 Cannot open data connection.
      

  7.   

    PORT 10,0,0,13,11,229PORT 192,168,10,199,5,138服务器IP是 10,0,0,13,11
    你的程序里IP怎以是192,168,10,199呢
      

  8.   

    PORT 10,0,0,13,11,229这个,是我在服务器本机上运行程序,这个地址取的是本机的ip地址PORT 192,168,10,199,5,138
    这个是我在我公司的机器上运行程序,我机器的内网ip是 192,168,10,199我猜是不是ftp要取客户机所在机器的ip我现在有5个客户,都是用同样的服务端,同样的端口映射,就这一个客户死活连不上,别的客户都很正常
      

  9.   

    现在我把客户端设置成被动模式,外网可以连FTP服务器上传下载了。。
    但是内网用户依然不能连ftp,很奇怪
    日志如下:第一次连接,下载文件失败
    CWD /2010/10/
         250 Directory changed to /2010/10
    SIZE {C84B3412-EE73-4EDD-B48E-DF0BABBF8581}.rar
         213 134784
    PASV
         227 Entering Passive Mode (10,0,0,13,40,29)
     
    第二次连接,上传失败
    PASV
         227 Entering Passive Mode (10,0,0,13,40,30)
    STOR {C3CADF04-B0EA-44EF-B755-A5DB95F40FDA}.rar
      

  10.   

    刚才说的 “内网用户依然不能连ftp”,是指内网用户用 服务器的公网ip访问 FTP服务器。
      

  11.   

    425 Cannot open data connection.
    错误提示很明显检查一下这个{5E76CC6F-6F4B-492A-89A8-58FD2876A5DE}.rar 文件,提示不能打开数据
      

  12.   

    lovezypj兄,那个文件没问题,我在内网能够下载。
      

  13.   

    我曾经也遇到过:程序log显示已经连接上了,但是一个20k的文件总是上传不了。后来,我添加了一句 
    AFtp.Passive := True.明确初始化为被动模式,一切就ok了。仅供参考。
      

  14.   

    学习下,我刚写了个ftp软件,准备实施应用了,没碰到这个问题。