FtpWebRequest打开随机端口而不是21

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FtpWebRequest打开随机端口而不是21相关的知识,希望对你有一定的参考价值。

我想通过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 OS上使用VS 2008 .NET 3.5。

有些人可以帮我解释一下这个方法。

我得到的错误:

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

答案

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

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

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

reqFTP.UsePassive = false;

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

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

以上是关于FtpWebRequest打开随机端口而不是21的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 应用程序实际上在端口 0 上运行,而不是随机运行

使用 FtpWebRequest 附加到大型机上的文件时出现问题

动态更改 Apache 服务器端口(不是手动,通过编程)

为啥端口是字符串而不是整数?

必须打开哪些端口才能与Firebase数据库(而不是FCM消息传递)进行通信?

FTP服务器