当在使用 FTP 连接时收到 FTP response 421 received 错误消息时,通常表示服务器关闭了连接。这可能是由于多种原因引起的,例如服务器连接数达到上限或网络问题。
常见原因及解决方法
1. 服务器连接数达到上限
当 FTP 服务器的连接数达到上限时,会返回 421 错误。此时可以尝试减少并发连接数或联系服务器管理员增加连接数限制。
可以查看vsftp.log得到:too many sessions for this address来证实就是连接数满造成。
解决方法: 增加服务器允许的最大连接数,或者减少客户端的并发连接数。
在 vsftpd.conf 中设置最大连接数
max_clients=50
2. 网络问题
网络不稳定或防火墙设置可能导致连接中断。确保网络连接稳定,并检查防火墙设置是否允许 FTP 流量。
3. 被动模式设置
在某些情况下,未正确设置被动模式可能导致连接问题。确保在代码中设置被动模式。
ftpClient.enterLocalPassiveMode();
示例
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect("192.168.10.131", 21);
ftpClient.login("user", "password");
// 设置被动模式
ftpClient.enterLocalPassiveMode();
// 执行文件操作
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ftpClient.logout();
ftpClient.disconnect();
} catch (IOException ex) {
ex.printStackTrace();
}
}
或在服务器上查看:
在某些情况下,切换到被动模式可以解决这个问题
示例:
ftp> passive
Passive mode on
4. 用户权限问题
确保 FTP 用户具有访问宿主目录的权限。如果权限不足,可能会导致连接被拒绝。
5.检查FTP服务器的连接超时设置
如果连接超时时间设置过短,可能会导致连接被服务器主动关闭。可以尝试增加连接超时时间,以避免连接被过早关闭。
6.检查磁盘空间
检查FTP服务器的磁盘空间是否足够。可以使用以下命令查看磁盘空间:
df -h