ftpclient文件上传 connection reset问题

给项目开发了一个ftp组件(ftp client)用来处理通用的上传下载的问题。今天出现一个很奇怪的问题,部署在A地的ftp client去连接B地的ftp server进行文件上传的时候出现connection reset的异常。

最开始怀疑ftp server的问题,但用ftp客户端工具可以连上server,所以这个嫌疑排除。

重新部署ftp client到另外的一台服务器,发现问题不在重现,之后试了很多台服务器包括本地的windows开发机也没有这个问题。

所以怀疑是A服务器本身的问题,可能是安全策略限制导致的。

 

上网查了下资料,发现ftp数据传输有两种模式:FTP Port模式和FTP Passive模式

 

于是在代码里面,在获取到ftp链接之后就将模式改成Passive模式,问题解决!

ftpclient.enterLocalPassiveMode();

stackoverflow的解释:

“before you initiate transfer. I suspect you need to get into PASV mode for data transfer. This can happen in case you are behind a router (NAT) or a firewall. The FTP server will try to connect to you for data connection by default, which means you start listening on some port and invite server to connect to it for transfer of data. But in case you are behind firewall or router, the server cannot connect to you directly. PASV mode instructs FTP server to instead open a port on server for transfer and the client connects to it.”

大体的意思是,设置FTPClient.enterLocalPassiveMode();在每次数据连接之前,ftp client协商ftp server开通一个端口来传输数据。

 

参考资料:

[FTP文件传输协议两种模式-主动模式和被动模式]

[FTP的20、21端口,工作模式]

 

posted @   Jager  阅读(4881)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示