apache FtpService 报错421

421错误原因:

同时连接该ftp的人数过多,一般ftp网站都有同时登陆人数的上限,超过该上限就会出现421错误。

分析:
  1. 连接超时或者数据传输超时
  2. 主动被动模式选择不符合网络环境
  3. FtpService服务器的线程数量配置
基础知识:

FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口)。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。

解决方案:

1. 连接超时或者数据传输超时

ftpClient.setDataTimeout(60000);       //设置传输超时时间为60秒 
ftpClient.setConnectTimeout(60000);       //连接超时为60秒

2. 主动被动模式选择不符合网络环境

主动模式
命令连接:客户端 >1023端口 -> 服务器 21端口
数据连接:客户端 >1023端口 <- 服务器 20端口
主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。

被动模式:
命令连接:客户端 >1023端口 -> 服务器 21端口
数据连接:客户端 >1023端口 -> 服务器 >1023端口
被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

折中方式
既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。

服务端是两种模式的,使用哪种模式取决于客户端,同时关键点在于网络环境适合用哪种模式,比如客户端在防火墙内,则最好选择被动模式
ftpClient.enterLocalActiveMode()便是配置成主动模式
ftpClient.enterLocalPassiveMode()则配置成被动模式。

FTP主动模式和被动模式的区别参考:https://www.cnblogs.com/ajianbeyourself/p/7655464.html

3. FtpService服务器的线程数量配置

在res\conf目录中找到ftpd-typical.xml文件,添加最大登录数等配置

<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
       http://mina.apache.org/ftpserver/spring/v1 
       http://mina.apache.org/ftpserver/ftpserver-1.0.xsd"
       id="myServer"        /*设置server的标志符,必须*/
       max-logins="5"       /*设置同时登陆的最大人数*/
       anon-enabled="false" /*设置匿名登陆为不允许*/
       max-anon-logins="0"  /*设置匿名登陆用户为0个*/
       max-login-failures="3"  /*设置3次失败登陆后,关闭此链接*/
       /*设置失败登陆后下一次登陆所需的时间间隔,防止暴力破解,单位是微秒*/
       login-failure-delay="30000">
    <listeners>
        <!--设置默认的链接端口为2121,必须-->
        <nio-listener name="default" port="2121">
            <ssl>
                <!--设置密钥存储路径和密钥存储密码,必须-->
                <keystore file="./res/ftpserver.jks" password="password" />
            </ssl>
                <!--设置多少时间后关闭一个闲置的链接,单位是秒-->
                <data-connection idle-timeout="60">
                    <!--设置主动链接配置,端口号“1886”-->
                    <active local-port="1886"/>
                    <!--设置被动链接配置,端口设置为“1886”,扩展地址为“137.222.18.114”,当需要访问的服务器返回外网地址时使用-->
                     <passive ports="1886" address="0.0.0.0" external-address="137.222.18.114"/>
                 </data-connection>
        </nio-listener>
    </listeners>
    <!--设置用户登陆信息,“./res/conf/users.properties”为文件路径,“encrypt-passwords=‘clear’”设置密码加密方式,默认是“MD5”,设置成“clear”表示不加密,直接输入-->
    <file-user-manager file="./res/conf/users.properties" encrypt-passwords="clear"/>
</server>

Server元素详解

这里写图片描述

最大线程数max-threads这个提高了应该提高处理客户端连接的速度。
ftpd-typical.xml配置可参考官网:http://mina.apache.org/ftpserver-project/configuration_listeners.html
或者中文文档https://wenku.baidu.com/view/5f0ab75f312b3169a451a4d8.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你在使用Maven构建项目时,可能会遇到org.apache.maven插件报错的情况。org.apache.maven是Maven的核心插件之一,它提供了一些常用的命令和功能,用于管理和构建项目。 当出现这种报错时,通常是由于以下几个原因导致的: 1. 插件版本不兼容:你可能在pom.xml文件中指定了一个不兼容的插件版本,或者使用了一个已经过时的插件版本。这可能会导致插件无法正常工作或者报错。 2. 依赖冲突:你的项目可能依赖了多个插件,而这些插件之间存在冲突。这可能是因为不同插件需要使用不同版本的依赖库,而这些依赖库版本不兼容。 3. Maven配置错误:你的Maven配置文件(如settings.xml)可能存在错误或者缺失,导致Maven无法正确加载和使用插件。 解决这种问题的方法通常有以下几种: 1. 检查插件版本:确保你使用的插件版本与你的项目兼容,并且是最新的稳定版本。你可以在Maven官方网站或者插件的官方文档中查找最新版本信息。 2. 解决依赖冲突:使用Maven的dependencyManagement机制来管理插件的依赖,确保所有插件使用的依赖库版本一致。你可以通过调整依赖库的版本或者排除冲突的依赖来解决冲突问题。 3. 检查Maven配置:确保你的Maven配置文件正确配置,并且包含了必要的插件仓库和镜像设置。你可以参考Maven官方文档或者其他资源来了解正确的配置方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值