【问题标题】:FtpWebRequest opens random port instead 21FtpWebRequest 打开随机端口而不是 21
【发布时间】:2018-09-05 21:53:23
【问题描述】:

我想通过 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 的数据连接。连接超时(每次运行时端口号都会更改)

【问题讨论】:

  • 因为它是一个 FTP 客户端,它没有绑定到端口 21(这是服务器应该使用的端口)。查看 GoDaddy 文档,了解应如何配置 FTP(主动或被动以及应使用哪些被动端口)。
  • @LexLi 它适用于 firefox ftp 连接没有问题。我检查了godaddy的信息页面,他们使用端口21进行ftp连接(例如filezilla)问题是每次创建另一个端口时,即使我在程序中写了端口21。
  • 但是我会检查它是主动还是被动谢谢
  • 感谢他们使用 reqFTP.UsePassive = true;

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


【解决方案1】:

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

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

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

reqFTP.UsePassive = false;

只需删除上面的行,你就会好起来的。

更多详情请参考我在FTP connection modes的文章。

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多