【发布时间】:2012-06-14 08:19:14
【问题描述】:
将ftpClient.connect 与没有激活 ftp 服务的现有主机一起使用时,超时仅在 5 分钟后发生,这太长了。
我尝试设置不同的超时(setDefaultTimeout、setDataTimeout),但这并没有改变任何东西。
FtpClient 继承自 SocketClient,它有一个 setConnectTimeout 方法,但是当我使用它时,我在运行它时得到一个 java.lang.NoSuchMethodError: org/apache/commons/net/ftp/FTPClient.setConnectTimeout。这似乎是因为某些 J2SW 1.2 兼容性,如 Commons-net FAQ 中所述:
问:如何设置连接超时? http://wiki.apache.org/commons/Net/FrequentlyAskedQuestions
他们建议实现自己的SocketFactory,使用特定的超时从扩展的 Socket 类创建对象。但是,当尝试使用 ftpClient.setSocketFactory 时,我也会得到一个 java.lang.NoSuchMethodError。
有什么帮助我可以减少连接超时吗?
【问题讨论】:
-
提到的常见问题解答问题和答案说:
Since Commons Net 1.2.x has a J2SE 1.2 compatibility requirement, the ability to specify a connect timeout is not included.表示 Commons Net 1.2.x 库没有所需的功能。您是否特别需要旧版本的库?否则,请尝试更新或最新版本,例如Commons Net 3.1 -FTPClient类有setConnectTimeout方法完全符合您在下面的答案中提到的需要。 -
我使用 FTPClient 3.1,我的 Eclipse 没有显示错误,但是在应用服务器上部署后,它给出了上述错误。 Mavne build pom.xml 依赖版本一致,ear 文件包含正确的jar。
-
这真的很奇怪,因为这应该可以工作...您是否尝试过在 Eclipse 下通过简单的
public static void main(String[] args)方法进行连接?也许问题出在应用程序服务器上:它可能提供旧版本的 Commons Net 库,您部署的应用程序可能会从那里使用 FTPClient ... -
是的,这行得通。这是在 weblogic 10.3.5 中运行的。也许在类路径中有一个较旧的公共网络以某种方式被 weblogic 本身包含在优先级?
标签: java ftp-client apache-commons-net