2017-09-04 249 views
1

我制作了一个FTPS客户端阵列,并试图将其连接到我感兴趣的端口ip &。这是代码。当连接到Java中的FTP端口990时出现“连接被拒绝”

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)部分与错误

异常螺纹失败 “主” java.net.ConnectException:连接被拒绝:>连接 在java.net.DualStackPlainSocketImpl.connect0 (本机方法) 在java.net.DualStackPlainSocketImpl.socketConnect(来源不明) 在java.net.AbstractPlainSocketImpl.doConnect(来源不明) 在java.net.AbstractPlainSocketImpl.connectToAddress(来源不明) 在java.net.AbstractPlainS ocketImpl.connect(来源不明) 在java.net.PlainSocketImpl.connect(来源不明) 在java.net.SocksSocketImpl.connect(来源不明) 在java.net.Socket.connect(来源不明) 的组织。 apache.commons.net.SocketClient.connect(SocketClient.java:182) at org.apache.commons.net.SocketClient.connect(SocketClient.java:203) at org.apache.commons.net.SocketClient.connect( SocketClient.java:296) 在com.samsung.ftptest.ftptest.main(ftptest.java:66)

当它是FTP,FTPS不,这是工作的罚款。有人知道为什么它不起作用吗?

谢谢。

+0

也许FTP服务器没有设置为FTPS? –

+0

@Scary Wombat感谢您的评论。那么你会认为代码本身没有问题?顺便说一句,我改变了client [i] = new FTSClient(“true”)给client [i] = new FTSClient(true),删除了引号。 – sanghyun

+0

对不起,我没有为你做这个假设 –

回答

1

上你运行该系统就可以了,不连接到服务器机器上的端口990。有许多的原因,这可能是这种情况,包括:

  • 服务器没有侦听端口990
  • 防火墙阻止端口990

你应该做的第一件事是找到使用FTPS成功连接到此服务器的客户端,并检查其配置:

  • 它配置了哪个端口?
  • 它使用方法是:。
    • 明确FTPS(这是优选的,符合标准的方式来做到FTPS它连接在平原FTP端口21,则协商到安全协议
    • 隐FTPS (这种方法从来不是一个标准,但确实发生在野外。如HTTPS,不同的端口(通常是990)时,以及SSL握手连接后立即发生)

一旦你知道这些事情,你可以把正确的端口和正确的方式进入你的代码。

如果你是某港口,而且它从其他机器的工作原理,那么防火墙是可能的罪魁祸首。证明你无法连接,使用telnet:

unixprompt$ telnet serverhostname 990 

如果它挂起,或说“连接被拒绝”,你知道这台机器不能达到它。如果你得到“连接到...”,你知道至少你有TCP连接(然后ctrl-] quit出去)。

如果你发现它的防火墙,为战斗准备。你正在为控制连接而苦苦挣扎 - 数据连接是一场全新的战斗。为被动模式显式FTPS打开防火墙非常简单,并在此IETF草案中有记录:https://tools.ietf.org/html/draft-fordh-ftp-ssl-firewall-00 - 但防火墙管理员非常不愿意这么做。

+0

非常感谢的种类和具体的答案。事实证明,感兴趣的服务器不支持端口990更改为21端口转移问题的另一个 - javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException :.这问题后的问题,但您的解决方案是正确的!非常感谢,祝你有美好的一天! – sanghyun

1

服务器可能不支持(不建议使用的)隐式FTPS模式。

你最好使用反正明确的模式:

client[i] = new FTPSClient(); 
// ... 
client[i].connect(ip, 21); 

(假设服务器不支持FTP通过TLS/SSL在所有)

+1

我们无法猜测服务器是否符合标准显式模式,或不推荐使用隐式模式。 OP应该与已知的工作客户端进行测试。 – slim

+0

感谢您的评论。在我的情况下,既不工作了:( – sanghyun

+0

从其他问题的评论,似乎我的解决方案做的工作,这也带来了另外一个问题是一个不同的主题。 –

相关问题