apache FTPClient 操作出现java.net.SocketException: Connection reset by peer: socket write error 踩坑

最近使用了FTP搭建了一个文件服务器 主要用来上传文件 图片等

结果操作ftp的时候爆出了:

java.net.SocketException: Connection reset by peer: socket write error

这个错误不是一开始就爆出来了 后来测试的时候才发现 很蛋疼的一个东西(后面有说为什么说他蛋疼!!!)

过程:

一开始就是ftp的搭建  我这里使用了是windows 自带 默认的ftp 开启的方法网上也有很多相关的文章,这里就不在写了

在搭建ftp的时候也遇到了一些坑 (打开FTP老是跳转到IIS官网页面)有兴趣可以看下 搭建工作差不多 其中的一些小问题 比如权限 账号密码等问题 都可以从网上找到解决办法  (我就是这样一路踩坑过来的 心累啊!@!!!!!)

然后就是代码操作了  一开始也都没有什么问题,但是在测试的时候 我在测试机上面部署了3台tomcat(我做了负载均衡)。然后问题就出现了。

经过各种验证 (阴差阳错的认为)是多个tomcat登录同一个ftp账号密码导致的 但是这种猜测很快就被否认了, 然后这个查找资料 返现有可能是ftp的主动模式和被动模式造成了 但是试了也没有效果。然后偶然发现(因为我试小白。。。。) ftp服务器搭建还有其他 的方法 比如:FileZilla Server (下载地址:https://filezilla-project.org) 

然后我停掉了之前windows自带的那个ftp 安装了fileZilla server 安装过程也很简单 就是一路点击next就可以了。

有兴趣可看下我这个FileZilla Server配置文章:https://blog.csdn.net/InnovationAD/article/details/84944238

安装完成,经过一番设置 配置了账号和密码 开启了防火墙的入站规则 开发端口21 和 ftp数据通行端口段

最后测试:

发现还是一样的问题没有得到结果 但是我在FileZilla Server上面的日志发现了为什么会爆Connection reset by peer: socket write error

apache FTPClient 操作出现java.net.SocketException: Connection reset by peer: socket write error 踩坑_第1张图片

看到了这里 我曹 真的是tm的 (默认windows ftp没有这么方便看日志 )原来是ftp默认是120秒超时 自动断开连接 但是为什么说很蛋疼 是因为Apache ftpClient里面的有一个 isConnected  在api上面是这样解析的:

apache FTPClient 操作出现java.net.SocketException: Connection reset by peer: socket write error 踩坑_第2张图片

我擦 超时了他还是会返回true   这个就是蛋疼的地方(对我一个小白来说 很坑)

总结报错Connection reset by peer: socket write error

原因之一 :ftp默认120秒连接超时之后在进行ftpClient操作的话就会出现这个错误 网络上也有很多这个错误的分析 (就是没有想到有这个可能 ,,,,唉 太年轻了只能说!!)

解决问题:

方法一:直接设置ftp超时时间 为0  (可以在代码设置connectTimeout 或者 直接在ftp上面设置超时时间)

方法二:那就是在连接超时之后在进行重连连接登录   可以在操作ftp操作的时候 cache一下异样 然后在进行重连连接登录

你可能感兴趣的:(FTP)