gpt4 book ai didi

java - 在 Java 中使用 FTP 并检测断开连接

转载 作者:行者123 更新时间:2023-11-30 11:40:30 25 4
gpt4 key购买 nike

我用过 org.apache.commons.net.ftp.FtpClient创建一个可靠的 FTP 类,它应该并行下载多个文件,并在失败时重试。

奇怪的是,我似乎无法获得识别失败的代码。例如,如果我在传输过程中拉我的以太网电缆,代码似乎会继续阻塞在:

client.retrieveFile(nextFile, ftpOutputStream);

行。有人能告诉我为什么它会阻塞在这一行而不是返回 false 或抛出异常吗?我是否错过了设置超时或类似的东西?

try {
OutputStream ftpOutputStream = new FileOutputStream(fileName);

System.out.println("Attempting to retrieve file [" + nextFile + "].");
success = iclient.retrieveFile(nextFile, ftpOutputStream);
System.out.println("Returned from retrieving file [" + nextFile + "].");

ftpOutputStream.close();
}

//Can fail due to FTPConnectionClosedException, CopyStreamException, or IOException. In any case, best course
//of action is to simply create a new connection, log in again, and change back to target directory.
catch(Exception ex) {

try {
System.out.println("Error occurred during download, deleting file and restarting.");
Thread.sleep(1000);

//Delete the failed file assuming any of it got written to the local drive.
File f = new File(fileName);
if(f.exists()) {
System.out.println("Deleting file...");
f.delete();
}

Thread.sleep(5000);
}
catch (InterruptedException iex) {
System.out.println("Interrupted exceptoin while respoding to failed FTP attempt.");
}
}

最佳答案

“解决此问题的方法是实现您自己的 SocketFactory 并使用 SocketClient.setSocketFactory 设置它(FTPClient 是 SocketClient 的子类)。当您实现 SocketFactory 时,添加 setConnectTimeout 方法或类似方法。在 createSocket 方法内部, 使用带超时的 J2SE 1.4 连接方法。”

请参阅“如何设置连接超时?”关于 Commons Net FAQ 的问题为什么会这样。

关于java - 在 Java 中使用 FTP 并检测断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12681505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com