我制作了一系列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)
部分失败并出现错误
线程中的异常&#34; main&#34; java.net.ConnectException:拒绝连接:&gt;连接 at java.net.DualStackPlainSocketImpl.connect0(Native Method) 在java.net.DualStackPlainSocketImpl.socketConnect(未知来源) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 在java.net.AbstractPlainSocketImpl.connect(未知来源) 在java.net.PlainSocketImpl.connect(未知来源) 在java.net.SocksSocketImpl.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时,它工作正常。有没有人知道它为什么不起作用?
谢谢。
答案 0 :(得分:2)
您运行此系统的系统无法连接到服务器计算机上的端口990。可能存在多种原因,包括:
您应该做的第一件事是找到一个使用FTPS成功连接到此服务器的客户端,并检查其配置:
一旦了解了这些内容,就可以将正确的端口和正确的模式放入代码中。
如果您确定端口,并且它可以从其他计算机上运行,那么防火墙可能就是罪魁祸首。使用telnet证明您无法连接:
unixprompt$ telnet serverhostname 990
如果它挂起,或说'#34;连接被拒绝&#34;,您就知道这台机器无法到达它。如果你得到&#34;连接到......&#34;你知道至少你有TCP连接(然后ctrl-] quit
出来)。
如果您发现它是防火墙,请为战斗做好准备。你正在努力控制连接 - 数据连接是一场全新的战斗。打开被动模式显式FTPS的防火墙非常简单,并在本IETF草案中记录:https://tools.ietf.org/html/draft-fordh-ftp-ssl-firewall-00 - 但是防火墙管理员非常不愿意这样做。
答案 1 :(得分:1)
服务器可能不支持(已弃用)隐式FTPS模式。
最好还是使用显式模式:
client[i] = new FTPSClient();
// ...
client[i].connect(ip, 21);
(假设服务器确实支持基于TLS / SSL的FTP)