C#编程无法使用FTP被动模式pasv远程上传数据至Windows服务器错误解决分享

来源:互联网 发布:ubuntu退出root 编辑:程序博客网 时间:2024/04/29 00:22

最近接了个新任务,其中有个环节是使用ftp上传数据到服务器,呵呵!朋友们想节省时间走捷径,FTP Server就用Windows 2008 Server内置的FTP服务搭建,结果在部署测试时报错差点崩溃,查阅大量资料也没找到合理的答案,在此存档为大家节省时间。

  • 关键词:ftp  port  21 pasv 501 channel windows System.Net.WebException
  • 任务:FTP远程上传--使用C#编程采用被动模式(PASV)上传数据至Windows 2008操作系统自带的FTP服务器非标准21端口
  • 测试环境:

FTP Client OS:Windows 7,未使用第三方FTP Client软件;

FTP Server OS:Windows 2008,使用Windows 2008 FTP服务,FTP服务使用端口21210(非标准21端口)。

  • 故障现象:
  1. Command下ftp登录成功后查看dir等命令出现“150 Opening ASCII mode data connection.”停滞无法继续,Ctrl+C后出现“终止所有活动的数据连接...
    425 Cannot open data connection.”
  2. System.Net.WebException: 远程服务器返回错误: (501) 参数或变量中有语法错误
  3. 英文类似错误:501 Server cannot accept argument
  • 原因分析:

无法使用pasv被动模式上传数据,专家们众说纷纭,经过测试观察,自Win7 Client上传数据到Win2008 Ftp Server,既然21端口可以正常使用PASV被动模式上传,改到21210端口后就不能正常使用PASV被动模式上传,能够说明Windows Client actually support passive mode,倒是Windows 2008 Ftp Server站点在改用其它端口后仍然部分使用21端口通信的可能性更大一些,时间仓促,究竟是Windows FTP服务的bug或是设计者有意而为之,恐怕解铃还须系铃人...

  • 推论与建议:

外部公网环境下Windows FTP Server与FTP Client之间协商应该尽量使用常规端口21(局域网环境测试Windows FTP Server改用其它端口可正常使用PASV模式),建立ControlChannel或DataChannel,若改用类似21210等其它端口将不能正常使用PASV被动模式。

阅读全文
0 0