最近使用了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
看到了这里 我曹 真的是tm的 (默认windows ftp没有这么方便看日志 )原来是ftp默认是120秒超时 自动断开连接 但是为什么说很蛋疼 是因为Apache ftpClient里面的有一个 isConnected 在api上面是这样解析的:
我擦 超时了他还是会返回true 这个就是蛋疼的地方(对我一个小白来说 很坑)
总结报错Connection reset by peer: socket write error
原因之一 :ftp默认120秒连接超时之后在进行ftpClient操作的话就会出现这个错误 网络上也有很多这个错误的分析 (就是没有想到有这个可能 ,,,,唉 太年轻了只能说!!)
解决问题:
方法一:直接设置ftp超时时间 为0 (可以在代码设置connectTimeout 或者 直接在ftp上面设置超时时间)
方法二:那就是在连接超时之后在进行重连连接登录 可以在操作ftp操作的时候 cache一下异样 然后在进行重连连接登录
在这里打个小广告 由于自己比较喜欢游戏壁纸 自己搞了一个小小的公众号 喜欢游戏壁纸的话可以关注一下哦!!