2017-09-04 18 views
1

FTPS 클라이언트 배열을 만들고이 포트를 내 관심 대상 포트 &에 연결하려고했습니다. 여기에 코드가 있습니다.Java에서 FTP 포트 990에 연결할 때 "Connection refused"가 표시됩니다.

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.AbstractPlainS에서 java.net.AbstractPlainSocketImpl.connectToAddress (알 수없는 소스) 에서 java.net.AbstractPlainSocketImpl.doConnect (알 수없는 소스) 에서 java.net.DualStackPlainSocketImpl.socketConnect (알 수없는 소스) 에서 (기본 방법) ocketImpl.connect (알 소스) 조직에서의 java.net.SocksSocketImpl.connect java.net.PlainSocketImpl.connect (알 소스) (알 소스)에 java.net.Socket.connect (알 소스)에 . (org.apache.commons.net.SocketClient.connect (SocketClient.java:203) 에서) 이 FTP,하지 FTPS 경우 SocketClient.java:296) com.samsung.ftptest.ftptest.main에서 은 (ftptest.java:66)

것은, 그것을 잘 노력하고 있습니다. 아무도 왜 작동하지 않는지 알 수 있습니까?

감사합니다.

+0

FTP 서버가 ftps 용으로 설정되지 않았습니까? –

+0

@ Skary Wombat이 의견에 감사드립니다. 그렇다면 코드 자체에는 아무런 문제가 없다고 가정 할 것입니다. BTW, client [i] = new FTSClient ("true")를 client [i] = new FTSClient (true)로 변경하여 인용 부호를 삭제했습니다. – sanghyun

+0

죄송합니다. 전 당신을 위해 그 가정을하지 않겠습니다. –

답변

1

시스템 (서버를 가정하는 TLS를 통해 모든/SSL을 FTP를 지원합니다)를 할 수 있습니다 서버 컴퓨터의 포트 990에 연결하지 마십시오. 여러 가지 이유로이 포함 케이스가 될 수 있습니다

  • 이 서버는 990
  • 방화벽이 포트를 차단 포트에서 수신 대기하고 있지 않은 990

당신이해야 할 첫 번째 일은이다 FTPS를 사용하여이 서버에 성공적으로 연결하는 클라이언트를 찾고 구성을 확인하십시오.

  • 어떤 포트가 사용되도록 구성 되었습니까? .
  • 가 사용된다. 다음, 그것은 포트 (21)에 일반 FTP에 연결
    • 명시 적 FTPS (이가 바람직하고, 표준을 준수하는 FTPS를 할 수있는 방법은 보안 프로토콜까지 협상
    • 암시 적 FTPS (이 접근법은 결코 표준이 아니지만 야생에서 발생합니다.당신이이 일을 알게되면, 당신은 당신의 코드에 적합한 포트와 올바른 모드를 넣을 수 있습니다 HTTPS, 다른 포트 (보통 990)과 마찬가지로 사용 및 SSL 핸드 셰이크는) 접속 후 즉시

를 발생 .

포트가 확실하고 다른 컴퓨터에서 작동하는 경우 방화벽이 발생할 가능성이 큽니다. 텔넷을 사용하여 연결할 수 없음을 보여줍니다

unixprompt$ telnet serverhostname 990 

을가 중단, 또는, 당신은이 기계가 도달 할 수 있다는 사실을 알고 "연결이 거부"라고합니다. 당신이 "Connected to ..."를 얻는다면 당신은 적어도 당신이 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); 

는 당신이 이것을 실행하고있는

+1

서버가 표준 준수 명시 적 모드인지 또는 암시 적 모드인지는 추측 할 수 없습니다. OP는 잘 알려진 고객과 테스트해야합니다. – slim

+0

댓글을 주셔서 감사합니다. 내 경우에는 둘 다 해결되지 않았다 : ( – sanghyun

+0

귀하의 의견을 다른 질문에, 그것은 내 솔루션 않았다 것 같습니다. 다른 문제가 가져온 다른 주제입니다. –