FtpWebRequest改为打开随机端口21

时间:2018-09-05 21:53:24

标签: c# .net visual-studio-2008 ftp ftpwebrequest

我想通过FTP在程序中下载文件。 Godaddy服务器仅在端口21上工作。但是,每次我要连接时,连接都会被拒绝,因为端口号是随机的而不是端口21

我使用的方法如下

FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + "turcguide.com" + ":21"));
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential("myusername", "mypass");
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
reqFTP.Proxy = null;
reqFTP.KeepAlive = false;
reqFTP.UsePassive = false;
WebResponse resp = reqFTP.GetResponse();

在Windows 7 Home Basic操作系统上使用VS 2008 .NET 3.5。

可以帮我在这种方法中错过的事情吗?

我得到的错误:

  

425无法打开与端口49756的数据连接。连接超时(每次运行中端口号都会更改)

1 个答案:

答案 0 :(得分:1)

您正在使用活动的FTP模式。

在活动模式下,客户端(在这种情况下为FtpWebRequest)为服务器需要连接的每次传输打开一个监听端口。该端口号是随机的,不能为21。这是正确的行为。它不起作用的原因不是GoDaddy不支持随机端口。原因是您的Windows防火墙阻止GoDaddy连接回该端口。

如果您不希望客户端打开随机端口,请使用被动模式。在被动模式下,打开端口的是服务器,而不是客户端。通常,您应该始终使用被动模式,因为您希望它具有防火墙问题。被动模式实际上是FtpWebRequest的默认模式。您已通过以下语句明确切换到活动模式:

reqFTP.UsePassive = false;

只需要删除上面的那行就可以了。

有关更多详细信息,请参阅我在FTP connection modes上的文章。