FTP上传超时问题排查 ftpClient.storeFile Connection timed out

服务器 0

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.检查主被动模式是否与服务端模式一致 上传一般都是被动模式,是否有设置被动模式

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

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

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

ftpClient.addProtocolCommandListener(                new PrintCommandListener(                        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服务器版本不兼容的原因。

            <dependency>                <groupId>commons-net</groupId>                <artifactId>commons-net</artifactId>                <version>3.6</version>            </dependency>

也许您对下面的内容还感兴趣: