2017-02-09 122 views
4

私は特定のFTPサーバーを持っています。 WinSCPや他のプログラムごとにサーバーに接続できます。私は既にJava経由でサーバーに接続していましたが、しばらくしてから接続できません。 WinSCPごとに私はいつもつながります。サーバーが問題の原因かプログラムかどうかという疑問があります。FTPClient SocketTimeoutExceptionタイムアウトが発生しました

私のコードがあります:

private FTPClient ftpClient = null; 

public FtpServerConnector() throws Exception { 
    ftpClient = new FTPClient(); 
    ftpClient.connect(url); 
    ftpClient.login(username, password); 
} 

public List<FTPFile> getDirectory(String directoryPath) throws Exception { 
    FTPFile[] files = ftpClient.listFiles(directoryPath); 
    List<FTPFile> result = new ArrayList<FTPFile>(); 
    for (FTPFile ftpFile : files) { 
     if (ftpFile.getTimestamp().getTime().getTime() >= Long.parseLong("1451606400000")) { 
      result.add(ftpFile); 
     } 
    } 
    return result; 
} 

public static void main(String[] args) { 
    try { 
     FtpServerConnector ftpServerConnector = new FtpServerConnector(); 
     List<FTPFile> folders = ftpServerConnector.getDirectory("/"); 
     for (FTPFile ftpFile : folders) { 
      System.out.println(ftpFile.getName()); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

例外があります:

java.net.SocketTimeoutException: Read timed out 
at java.net.SocketInputStream.socketRead0(Native Method) 
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) 
at java.net.SocketInputStream.read(SocketInputStream.java:170) 
at java.net.SocketInputStream.read(SocketInputStream.java:141) 
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) 
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) 
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) 
at java.io.InputStreamReader.read(InputStreamReader.java:184) 
at java.io.BufferedReader.fill(BufferedReader.java:161) 
at java.io.BufferedReader.read(BufferedReader.java:182) 
at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58) 
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:314) 
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:294) 
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:483) 
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:608) 
at org.apache.commons.net.ftp.FTP.port(FTP.java:932) 
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:812) 
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:759) 
at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:3293) 
at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:3271) 
at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2930) 
at com.kianaanalytics.eventManagement.util.FtpServerConnector.getDirectory(FtpServerConnector.java:38) 
at com.kianaanalytics.eventManagement.util.ImportWorker.getAllNewFairFolders(ImportWorker.java:19) 
+0

ftpClient =新しいorg.apache.commons.net.ftp.FTPClient()。 \t \t \t \t ftpClient.setConnectTimeout(7200000); \t \t \t \t ftpClient.setDefaultTimeout(720000); \t \t \t \t ftpClient.connect(hostName); \t \t \t \t ftpClient.setKeepAlive(true); \t \t \t \t ftpClient.setControlKeepAliveReplyTimeout(3000); \t \t \t \t ftpClient.setControlKeepAliveTimeout(10); \t \t \t \t ftpClient.setBufferSize(1024 * 1024); – Sarma

答えて

0

ディレクトリがその中の「あまりにも多くの」ファイルを持っているように見えた - 投げるには長すぎるように十分SocketTimeout例外。

FTPクライアントで使用しているバージョンを教えていないのですが、 この問題は何か類似しているようです。3.4より低いバージョンの場合はバージョンアップを検討します。

https://issues.apache.org/jira/browse/NET-552

関連する問題