当前位置:   article > 正文

FTP上传超时问题排查 ftpClient.storeFile Connection timed out_ftp文件上传java.net.sockettimeoutexception: connect ti

ftp文件上传java.net.sockettimeoutexception: connect timed out

Ftp storeFile 超时日志如下

Caused by: java.net.ConnectException: Connection timed out (Connection timed out)

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)

at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)

at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)

at java.net.Socket.connect(Socket.java:589)

at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:894)

at org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:633)

at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:624)

at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1976)

at com.byai.aegis.common.util.FTPFileUtil.upload(FTPFileUtil.java:203)

... 33 common frames omitted

1.检查服务端网络是否能通,可以用命令的方式登录ftp服务器,上传,下载文件试下。

2.检查主被动模式是否与服务端模式一致 上传一般都是被动模式,是否有设置被动模式

  1. FTPClient ftpClient = getClient();
  2. ftpClient.addProtocolCommandListener(
  3. new PrintCommandListener(
  4. new PrintWriter(new OutputStreamWriter(new LogOutputStream(log), "UTF-8")), true));
  5. // 连接FTP服务器
  6. ftpClient.connect(ftpConfig.getIp(), ftpConfig.getPort());
  7. // 登录FTP
  8. ftpClient.login(ftpConfig.getUserName(), ftpConfig.getPassword());
  9. // 正常返回230登陆成功
  10. int reply = ftpClient.getReplyCode();
  11. // 设置被动模式
  12. ftpClient.enterLocalPassiveMode();
  13. log.info("reply {}",reply);
  14. if (!FTPReply.isPositiveCompletion(reply)) {
  15. ftpClient.disconnect();
  16. throw new RuntimeException("连接ftp失败");
  17. }

// 设置被动模式
ftpClient.enterLocalPassiveMode(); 建议设置在login 以后,但也有人设置在ftpClient.storeFile 之前的,都可以尝试下

3.查看ftp服务端日志,需要在connect前加上listenner

  1. ftpClient.addProtocolCommandListener(
  2. new PrintCommandListener(
  3. new PrintWriter(new OutputStreamWriter(new LogOutputStream(log), "UTF-8")), true));

我遇到的超时ftp日志如下

: 220 (vsFTPd 3.0.2)

:

: USER *******

:

: 331 Please specify the password.

:

: PASS *******

:

: 230 Login successful.

:

: reply 230

: PWD

:

: 257 "/"

:

: CWD test/123/

:

: 250 Directory successfully changed.

:

: MODE S

:

: 200 Mode set to S.

:

: TYPE I

:

: 200 Switching to Binary mode.

:

: PASV

:

227 Entering Passive Mode (218,108,105,4,180,14).

 一直卡在store 上传文件处超时,后面通过升级commons-net到由3.3升级到3.6版本后解决,猜测可能是由于ftp服务器版本不兼容的原因。

  1. <dependency>
  2. <groupId>commons-net</groupId>
  3. <artifactId>commons-net</artifactId>
  4. <version>3.6</version>
  5. </dependency>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/255527
推荐阅读
相关标签
  

闽ICP备14008679号