我制作了一个ftps客户端阵列,并尝试将其连接到我感兴趣的ip端口。这是密码。
public class ftptest
{
public static void delete_files(String path, int n) throws IOException
{
String realpath;
for(int i=0 ; i<n ; i++)
{
realpath = path+i;
File file = new File(realpath);
FileUtils.cleanDirectory(file);
}
}
public static void main(String[] args) throws Exception
{
int number = 1;
String ip = "some_ip";
int port = 990;
FTPSClient[] client = new FTPSClient[number];
System.out.println(ip);
System.out.println("port = "+ port);
for(int i = 0; i < number; i++)
{
String path = "D:\\ftptest\\client"+i;
File file = new File(path);
file.mkdir();
client[i] = new FTPSClient(true);
client[i].setRemoteVerificationEnabled(false);
client[i].setTrustManager
(TrustManagerUtils.getAcceptAllTrustManager());
client[i].enterLocalPassiveMode();
client[i].setControlEncoding("UTF-8");
client[i].connect(ip,port);
System.out.println("Connected to " + ip + ".");
}
}
}
但不知怎的,它失败了 client[i].connect(ip, port)
放弃错误
线程“main”java.net.connectexception中出现异常:连接被拒绝:>connect at java.net.dualstackplainsocketimpl.connect0(本机方法)at java.net.dualstackplainsocketimpl.socketconnect(未知源)at java.net.abstractplainsocketimpl.doconnect(未知源)at java.net.abstractplainsocketimpl.connecttoaddress(未知源)java.net.abstractplainsocketimpl.connect(未知源),java.net.plainsocketimpl.connect(未知源),java.net.socksocketImpl.connect(未知源),java.net.socket.connect(未知源),org.apache.commons.net.socketclient.connect(socketclient)。java:182)在org.apache.commons.net.socketclient.connect(socketclient。java:203)在org.apache.commons.net.socketclient.connect(socketclient。java:296)在com.samsung.ftptest.ftptest.main(ftptest。java:66)
当它是ftp而不是ftps时,它工作正常。有人知道它为什么不起作用吗?
谢谢您。
2条答案
按热度按时间gkl3eglg1#
运行此操作的系统无法连接到服务器计算机上的端口990。出现这种情况的原因有很多,包括:
服务器没有监听端口990
防火墙正在阻止端口990
您应该做的第一件事是找到一个使用ftps成功连接到此服务器的客户端,并检查其配置:
它配置为使用什么端口?
是否使用:
明确的ftps(这是首选的、符合标准的ftps方式。它在端口21上以普通ftp连接,然后协商到一个安全协议。
隐式ftps(这种方法从来都不是标准,但在野外确实存在。像https一样,使用不同的端口(通常是990),ssl握手在连接后立即发生)
一旦你了解了这些,你就可以在你的代码中使用正确的端口和模式。
如果你确定这个端口,并且它可以在其他机器上工作,那么防火墙就是罪魁祸首。使用telnet演示您无法连接:
如果它挂起,或者说“连接被拒绝”,你就知道这台机器无法连接到它。如果你得到“连接到…”你知道至少你有tcp连接(然后
ctrl-] quit
出去)。如果你发现这是一个防火墙,准备战斗。你正在与控制连接作斗争--数据连接是一场全新的战斗。为被动模式显式FTP打开防火墙相当简单,并记录在ietf草案中:https://tools.ietf.org/html/draft-fordh-ftp-ssl-firewall-00 --但众所周知,防火墙管理员不愿意这么做。
ijxebb2r2#
服务器可能不支持(不推荐使用的)隐式ftps模式。
无论如何,您最好使用显式模式:
(假设服务器完全支持通过tls/ssl的ftp)