zoukankan      html  css  js  c++  java
  • ftp卡死问题

    最近用org.apache.commons.net.ftp.FTPClient  写ftp的上传下载的定时任务

    发现有时候线程会卡住,也不报错就一直不工作了,后来发现需要使用ftp的被动模式才行,实现如下

    以前有问题的代码是这样写的

    ftp.connect(odmInfo.getFtpserver(), port);// 连接FTP服务器

    ftp.login(odmInfo.getFtpusername(), odmInfo.getFtppwd());// 登录

    reply = ftp.getReplyCode();

    下面是修改后的代码,login后需要调用ftp.enterLocalPassiveMode();

    ftp.connect(odmInfo.getFtpserver(), port);// 连接FTP服务器

    ftp.login(odmInfo.getFtpusername(), odmInfo.getFtppwd());// 登录

    //设置ftp为被动模式,解决有时候ftp会卡住问题
    ftp.enterLocalPassiveMode();
    reply = ftp.getReplyCode();

    2019-08-22更新

    后来发现只加入被动模式设置也不行,还需要加入超时设置

    int reply;
    ftp.setDefaultTimeout(30 * 1000);
    ftp.setConnectTimeout(30 * 1000);
    ftp.setDataTimeout(30 * 1000);
    logger.info("start to connect ftp server");
    ftp.connect(odmInfo.getFtpserver(), port);// 连接FTP服务器
    logger.info("start to login ftp server");
    ftp.login(odmInfo.getFtpusername(), odmInfo.getFtppwd());// 登录
    //设置ftp为被动模式,解决有时候ftp会卡住问题
    ftp.enterLocalPassiveMode();

    reply = ftp.getReplyCode();
    logger.info("replyCode======"+reply);
    if (!FTPReply.isPositiveCompletion(reply)) {

    ftp.disconnect();
    return uploadStatus;
    }
    ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
    boolean mkdirStatus=makeMultiDir(ftpBasePath,ftp);
    if(!mkdirStatus)
    {
    logger.info("make multi dir error!");
    return uploadStatus;
    }

  • 相关阅读:
    解决chrome console打印的信息一闪而过
    Docker 构建自定义镜像
    Docker 镜像、容器、仓库
    Docker 简介、下载安装
    执行yum list installed | grep xxx 命令时报错:未提供依赖perl-DBD-SQLite、perl-DBI
    SpringBoot 配置多种运行环境
    SpringCloud Config 分布式配置管理
    SpringCloud Sleuth+Zipkin 分布式链路追踪
    Dubbo 配置中心、元数据中心
    dubbo admin的使用
  • 原文地址:https://www.cnblogs.com/xiaohanlin/p/11213112.html
Copyright © 2011-2022 走看看