问题描述
我正在尝试使用Apache FTPSClient库传输文件。这是2个单独的程序,用于连接和发送文件。有时从两个客户端成功进行文件传输,有时1个程序失败,有时都失败。 我已经用相同的错误遍历了线程。我无法确定发生这种情况的确切原因。 对使用相同端口号连接到同一FTP站点的2个客户端有什么限制?如果是,有时它是如何工作的。请提示。调用connect()时引发错误。
堆栈跟踪:
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:944)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1323)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1350)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1334)
at org.apache.commons.net.ftp.FTPSClient.sslNegotiation(FTPSClient.java:269)
at org.apache.commons.net.ftp.FTPSClient._connectAction_(FTPSClient.java:205)
at org.apache.commons.net.socketClient.connect(SocketClient.java:176)
at org.apache.commons.net.socketClient.connect(SocketClient.java:196)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:462)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:925)
... 11 more
public void publish(FtpConnection conn,File[] files) throws FTPException
{
FTPSClient ftp = null;
String protocol = "TLS"; // TLS / null (SSL)
int port = 990;
int timeoutInMillis = 10000;
boolean isImpicit = true;
try {
ftp = new FTPSClient(protocol,isImpicit);
ftp.setDataTimeout(timeoutInMillis);
LOG.info("Before calling connect");
ftp.connect(conn.getHost(),port);
LOG.info("FTP connect successful");
ftp.enterLocalPassiveMode();
ftp.login(conn.getUsername(),conn.getpassword());
LOG.info("FTP login successful");
ftp.execPBSZ(0);
ftp.execPROT("P");
ftp.setFileType(FTP.BINARY_FILE_TYPE);
for (File file : files) {
publish(ftp,conn.getDirectory(),file);
}
}
catch (Exception e)
{
LOG.error("Failed to FTP.",e);
throw new FTPException("Failed to FTP message.",e);
}
finally
{
close(ftp);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)