ftp C# SOCKET PASV命令无响应
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ftp C# SOCKET PASV命令无响应相关的知识,希望对你有一定的参考价值。
批量下载时候,在下载过程中,少的时候第二三个,多的时候在三四十个文件的时候,发送PASV命令后,收不到响应文件,提示远程主机强制关闭一个现有连接。下载文件后对数据端口dataSocket进行关闭的,方式是
if(dataSocket.Connected)
dataSocket.disconnect(false);
dataSocket.Close();
为了保证dataSocket完全关闭,下载前也加入这段命令,一开始比较频繁,一般下载十来个文件就出现这种情况了,后来根据响应命令中获取的数据长度来保证数据端口数据全部获取完毕后,出现频率大大降低,但是下载三四十个文件后还是基本上会出现这种情况,请教高手有什么办法避免这种情况吗
FTP的port模式和pasv模式
FTP具有两种模式,分别是port模式(也叫主动模式)和pasv模式(也叫被动模式),怎么来理解这两种模式呢?我来打个比喻吧,在主动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会通过另外一个数据端口把东西传给客户端,这就是主动模式,可以理解为服务端主动给客户端传输文件;在被动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,服务器端知道后,就打开一个端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧,于是客户端就从那个端口进去拿文件了,这就是被动模式,可以理解为服务端被客户端拿走了东西。
在主动模式中,FTP的两个端口是相对固定的,如果命令端口是x的话,那数据端口就是x-1,也就是说默认情况下,命令端口是21,数据端口就是20;你把命令端口改成了600,那么数据端口就是599。这样使用防火墙就很方便了,只要开通这两个端口就可以了,但是如果客户端是共享上网的话那岂不是不能正常使用FTP了,这样还是不行,一定需要被动模式。
在被动模式中就麻烦了些,默认情况下命令端口是21,但是数据端口是随机的,这个问题又让我头痛了一下,还好,我又找到了办法,因为被动模式中数据端口的范围是可以自定义的,在此我以Serv-U 6.1.0.5版为例,在/Local Server/Settings/Advanced/中,这下好了,我把被动模式中的端口范围也设置为20-20,那么不管客户端使用何种模式来访问我的FTP,都只需要开通这两个端口了,再加上SQL Server的1433,一台服务器总共才开了3个端口,这下应该比较安全了,装上防火墙
以上是关于ftp C# SOCKET PASV命令无响应的主要内容,如果未能解决你的问题,请参考以下文章