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;
    }

  • 相关阅读:
    POJ 3114 Tarjan+Dijkstra
    278. First Bad Version
    209. Minimum Size Subarray Sum
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    710. Random Pick with Blacklist
    767. Reorganize String
    524. Longest Word in Dictionary through Deleting
    349. Intersection of Two Arrays
    350. Intersection of Two Arrays II
  • 原文地址:https://www.cnblogs.com/xiaohanlin/p/11213112.html
Copyright © 2011-2022 走看看