首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FtpWebRequest打开随机端口21

FtpWebRequest打开随机端口21
EN

Stack Overflow用户
提问于 2018-09-05 21:53:23
回答 1查看 254关注 0票数 1

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

我使用的方法如下

代码语言:javascript
复制
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();

在Windows7HomeBasicOS上使用VS 2008 .NET 3.5。

能不能请一些帮助我在这个方法中错过的东西。

我所犯的错误:

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

EN

回答 1

Stack Overflow用户

发布于 2018-09-06 05:52:46

您正在使用活动FTP模式。

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

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

代码语言:javascript
复制
reqFTP.UsePassive = false;

只要去掉上面的一行,你就好了。

有关更多细节,请参阅我关于FTP连接模式的文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52193857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档