栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C#使用FtpWebRequest报错: The operation has timed out. at System.Net.FtpWebRequest.GetRequestStream()

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#使用FtpWebRequest报错: The operation has timed out.    at System.Net.FtpWebRequest.GetRequestStream()

1、参考:https://www.cnblogs.com/junjie94wan/archive/2013/12/25/3490253.html

                https://www.cnblogs.com/huangzijian/p/6200802.html

               https://www.cnblogs.com/dadonggg/p/8778318.html

2、通过netstat -ano |findstr "10.12.2.201",发现服务端有很多TIME_WAIT,这里客户端再有上传文件请求,可能会得不响应,

      查看代码发现,此时处于被动模式下,通过网上的文章可以看出

FtpWebRequest
//
// 摘要:
//     获取或设置客户端应用程序的数据传输过程的行为。
//
// 返回结果:
// 如果客户端应用程序的数据传输过程侦听数据端口上的连接(服务端连客户端数据侦听端口,主动),则为 false;
// 如果客户端应在数据端口上启动连接(客户端连服务端数据侦听端口,被动),则为 true。默认值为 true。
//
// 异常:
//   T:System.InvalidOperationException:
//     对于一个已在进行的请求为此属性指定了一个新值。
public bool UsePassive { get; set; }

1、主动模式(false), 数据传输:服务端数据端口20主动连接客户端数据侦听端口,
服务端端口占用少,主要使用指令端口21+数据端口20
会有服务端穿客户端防火墙问题
2、被动模式(true),数据传输:客户端连接服务端(非20数据端口),
服务端占用端口可能会比较多,指令端口21+多个数据端口
同样有客户端穿服务端防火墙问题
不过只需要在服务端设置防火墙策略,而不用像主动模式需要在多个客户端电脑上配防火墙策略。
因为TCP的TIME_WAIT问题,如果上传文件,上传一次就打开一个连接
可能会造成TIME_WAIT过多,从而客户端不能再上传文件
即调用GetRequestStream()时,会报错,重启客户端程序,又可以上传了
但是经过一段时间可能又会有以上问题。

3、解决方法

解决方法:
1、使用主动连接
2、在程序上传期间只开一个FTP连接进行文件的上传,如果连接中断再开,
避免上传一个文件就开一个FTP连接。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/908592.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号