FTPClient套接字超时异常:读取超时。

5

我有一个FTP服务器。我可以通过WinSCP和其他程序连接到服务器。我以前已经使用Java连接过该服务器,但是一段时间后我无法连接。我能够一直通过WinSCP连接。现在的问题是,问题是由服务器还是程序引起的。

这是我的代码:

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)

1
ftpClient = new org.apache.commons.net.ftp.FTPClient(); ftpClient.setConnectTimeout(7200000); ftpClient.setDefaultTimeout(720000); ftpClient.connect(hostName); ftpClient.setKeepAlive(true); ftpClient.setControlKeepAliveReplyTimeout(3000); ftpClient.setControlKeepAliveTimeout(10); ftpClient.setBufferSize(1024*1024); - cvsr.sarma
请注意,有些设置器具有以秒为单位的超时参数(例如setControlKeepAliveTimeout),而其他设置器具有以毫秒为单位的超时参数(例如setControlKeepAliveReplyTimeout)。 - S. Doe
1个回答

0

看起来该目录内有“太多”文件 - 足以使套接字超时异常不太可能发生。

您没有提及在FTP客户端中使用的版本是什么, 这个问题似乎处理类似的东西 - 如果低于3.4,我会考虑升级版本。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接