【问题标题】:Chilkat FTP2 download (GetFile) large files (≈12 GB)Chilkat FTP2 下载 (GetFile) 大文件 (≈12 GB)
【发布时间】:2019-08-27 08:19:04
【问题描述】:

我一直在尝试使用 Chilkat.Ftp2 下载大约 12GB 大小的大文件。

一切似乎都还好,但是.. 下载往往会在 ~100% 时失败,在日志中我可以看到:

 获取文件:
    日期:2019 年 7 月 30 日
    奇尔卡特版本:9.5.0.79
    解锁前缀:无
    架构:小端; 32 位
    语言:.NET 4.7 / x86
    详细记录:0
    originalGreeting: 220 Titan FTP Server Ready。
    远程路径:/fo/bar/export_20190819.zip
    本地路径:\test\export_20190819.zip
    进度监控:
      启用:是
      心跳次数:0
      发送缓冲区大小:65536
    --进度监控
    下载到文件:
      本地文件路径:\test\export_20190819.zip
      替换现有的本地文件
      下载到输出2:
        模式Z:0
        二进制模式:1
        设置数据连接:
          被动转移模式
          setupPassiveDataSocket:
            发送命令:
              发送命令:PASV
            --发送命令
            读取命令响应:
              WindowsError:现有连接被远程主机强行关闭。
              Windows 错误代码:0x2746
              最大接收:65536
              在 TCP 套接字上接收数据失败
              读取 FTP 控制通道回复失败。
              readFtpReply:套接字致命错误。
            --readCommandResponse
          --setupPassiveDataSocket
          设置被动数据套接字失败
        --setupDataConnection
        设置下载数据连接失败。
        readRepliesAfterFailedDataConn:
          读取命令响应:
            读取 FTP 控制通道回复失败。
            readFtpReply:套接字连接关闭。
          --readCommandResponse
        --readRepliesAfterFailedDataConn
      --downloadToOutput2
      downloadToOutput:经过时间:18953 毫秒
    --downloadToFile
    失败的。 --获取文件
--ChilkatLog 

到目前为止我尝试的是设置:

ftp.EnableEvents = true;
ftp.RestartNext = true;
ftp.Passive = false;
ftp.SoSndBuf = 131072;
ftp.SoRcvBuf = 131072;

还时不时打电话给ftp.Noop();,以保持连接“活跃”。

我错过了什么吗?

编辑:下载和重试的一些伪代码

        string fileName = _ftp.GetFilename(i);
        string remoteFilePath = sourcePath + fileName;
        string destinationFilePath = destinationPath + fileName;
        bool success = _ftp.GetFile(remoteFilePath, destinationFilePath);

        if (success)
        {
            Log($"Downloading Finished {fileName} : {DateTime.Now.ToString("HH:mm:ss")}");
        }
        else
        {
            Thread.Sleep(30000);
            success = _ftp.GetFile(remoteFilePath, destinationFilePath);
        }

【问题讨论】:

    标签: c# ftp chilkat


    【解决方案1】:

    设置 ftp.LargeFileMeasures = true 应该可以解决问题。

    【讨论】:

    • PS> 除非有充分的理由,否则不要修改 SoSndBuf/SoRcvBuf 属性。此外,您可能需要 Passive 模式,如果您确实要恢复下载,最好只设置 RestartNext。
    • 感谢您的回复!另一个问题是,在 ftp.OnPercentDone 事件上使用 ftp.Noop() 是否值得?通常文件下载需要大约 1.5 小时关于 RestartNext,因为下载需要很长时间并且通常会下载多个文件恢复,它再次从 0% 开始将添加一些我如何尝试恢复失败下载的代码
    • 谢谢@Matt 看来我的问题已经解决了。另外,你能看看我的重试代码吗?是不是有什么大问题,为什么恢复下载百分比后又从0%开始?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    相关资源
    最近更新 更多