Ant FTP任务失败:java.net.SocketException

我试图通过FTP上传一个zip文件到Windows Server 2008 R2 FTP服务器(如果有问题的话)。 我有一个类似的任务来创建目录/释放,它工作,但不知何故通过FTP上传给我的问题。

    <ftp    action="put"
            userid="${adapter.ftp.username}" 
            password="${adapter.ftp.password}"
            server="${ftp.hostname}"
            retriesAllowed="5"
            verbose="true"
            systemTypeKey="WINDOWS"
            remotedir="/Release" >

        <fileset dir=".">
            <include name="Adapter.zip"/>
        </fileset>
    </ftp>

Ant调试日志:

  [ftp] Opening FTP connection to 192.168.2.120
  [ftp] custom configuration
  [ftp] custom config: system key = WINDOWS
  [ftp] custom config: server language code = 
  [ftp] connected
  [ftp] logging in to FTP server
  [ftp] login succeeded
  [ftp] changing the remote directory to /Release
  [ftp] sending files
  fileset: Setup scanner in dir C:dir with patternSet{ includes: [adapter.zip] excludes: [] }
  [ftp] transferring C:diradapter.zip
  [ftp] try #1: IO error (adapter.zip), retrying
  /.../
  [ftp] try #6: IO error (adapter.zip), number of maximum retries reached (5), giving up
  [ftp] disconnecting
  build.xml:165: error during FTP transfer: java.net.SocketException: Software caused connection abort: socket write error
at org.apache.tools.ant.taskdefs.optional.net.FTP.execute(FTP.java:2538)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:390)
at org.apache.tools.ant.Target.performTasks(Target.java:411)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)
   Caused by: java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source)
at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source)
at sun.nio.cs.StreamEncoder.implFlush(Unknown Source)
at sun.nio.cs.StreamEncoder.flush(Unknown Source)
at java.io.OutputStreamWriter.flush(Unknown Source)
at java.io.BufferedWriter.flush(Unknown Source)
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:472)
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:534)
at org.apache.commons.net.ftp.FTP.port(FTP.java:862)
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:463)
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:374)
at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1379)
at org.apache.tools.ant.taskdefs.optional.net.FTP.sendFile(FTP.java:2149)
at org.apache.tools.ant.taskdefs.optional.net.FTP$2.execute(FTP.java:1792)
at org.apache.tools.ant.util.RetryHandler.execute(RetryHandler.java:57)
at org.apache.tools.ant.taskdefs.optional.net.FTP.executeRetryable(FTP.java:1709)
at org.apache.tools.ant.taskdefs.optional.net.FTP.transferFiles(FTP.java:1788)
at org.apache.tools.ant.taskdefs.optional.net.FTP.transferFiles(FTP.java:1845)
at org.apache.tools.ant.taskdefs.optional.net.FTP.execute(FTP.java:2534)
... 15 more

我究竟做错了什么?


关闭Windows防火墙解决了这个问题。


值得尝试的一件事是被动ftp。 Ant的ftp任务有一个passive属性:

以性能价格选择被动模式(“是”)传输,以实现更好的穿透防火墙连接。 默认为“否”

有一个主动和被动模式之间的差异写在这里。 关键是,对于ftp命令(包括mkdir和OP问题中的chdir),使用单个开放端口(通常是端口21)。 但是对于数据传输,可能会使用不同的,可能是防火墙阻塞的端口。 有关ftp的防火墙相关问题有时会显示上述症状。

链接地址: http://www.djcxy.com/p/56819.html

上一篇: Ant FTP task fails: java.net.SocketException

下一篇: Passing parameters to a Bash function