2017-02-09 308 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