FTP上传超时问题排查 ftpClient.storeFile Connection 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.检查主被动模式是否与服务端模式一致 上传一般都是被动模式,是否有设置被动模式
FTPClient ftpClient = getClient();
ftpClient.addProtocolCommandListener(
new PrintCommandListener(
new PrintWriter(new OutputStreamWriter(new LogOutputStream(log), "UTF-8")), true));
// 连接FTP服务器
ftpClient.connect(ftpConfig.getIp(), ftpConfig.getPort());
// 登录FTP
ftpClient.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服务器版本不兼容的原因。
commons-net
commons-net
3.6