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连接。