gpt4 book ai didi

c# - 永无止境的异步 FTP 调用

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:37 24 4
gpt4 key购买 nike

我试图在给定的一组 ips 上找到所有接受匿名连接的 ftp 服务器。

基本上,我得到了我想要检查的 IP,然后在每个 IP 上尝试一个 ListDirectory。如果我没有异常(exception),ftp 存在并且可以访问。

我正在使用异步方法来验证 IP,这使事情变得更快。但是,然后我需要等到所有异步调用返回。为此,我对异步调用的数量进行了计数,问题是该计数器永远不会达到 0。

我的代码如下所示:

遍历 IP:

static int waitingOn;
public static IEnumerable<Uri> GetFtps()
{
var result = new LinkedList<Uri>();
waitingOn = 0;

IPNetwork ipn = IPNetwork.Parse("192.168.72.0/21");
IPAddressCollection ips = IPNetwork.ListIPAddress(ipn);

foreach( var ip in ips )
{
VerifyFtpAsync(ip, result);
}

while (waitingOn > 0)
{
Console.WriteLine(waitingOn);
System.Threading.Thread.Sleep(1000);
}

return result;
}

并验证每个 IP:

public async static void VerifyFtpAsync( IPAddress ip, LinkedList<Uri> ftps )
{
++waitingOn;
try
{
Uri serverUri = new Uri("ftp://" + ip);
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Timeout = 10000;
request.Credentials = new NetworkCredential("anonymous", "roim@search.com");

FtpWebResponse response = (FtpWebResponse) await request.GetResponseAsync();

// If we got this far, YAY!
ftps.AddLast(serverUri);
}
catch (WebException)
{
}
--waitingOn;
}

最佳答案

替换

FtpWebResponse response = (FtpWebResponse) await request.GetResponseAsync(); 

带同步码

FtpWebResponse response = (FtpWebResponse) request.GetResponse();

FtpWebRequest.GetResponseAsync 未针对特定于 FTP 的内容进行覆盖,它来自 WebRequest 基类,该类似乎无法正确处理此问题。

关于c# - 永无止境的异步 FTP 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com