주어진 ips에서 익명 연결을 허용하는 모든 ftp 서버를 찾으려고합니다.비동기 FTP 통화가 끝나지 않음
기본적으로 확인하고 싶은 IP를 얻은 다음 각각에 ListDirectory를 시도합니다. 예외가 없으면 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", "[email protected]");
FtpWebResponse response = (FtpWebResponse) await request.GetResponseAsync();
// If we got this far, YAY!
ftps.AddLast(serverUri);
}
catch (WebException)
{
}
--waitingOn;
}
코드가 hsip으로 설정된 부분이 누락 된 것 같습니다. 또한 VerifyFtpAsync에 대한 호출에서 누락되었습니다. 아마도 VerifyFtpAsync 래퍼 함수가있을 것입니다. –
그 변경을 잊어 버렸습니다. Uri의 HashSet (hsip)에 어떤 호출이 반환되지 않았는지 알기 위해 추가하려고했지만, 결국 HashSet에는 waitingOn == 4 대신 네 개의 null 요소가 있습니다. – roim
나는 당신이 기다리고있는 라인을 주석 처리하고 그것이 완료되었는지를보고 시작할 것입니다. 미안하지만, 이건별로 도움이 안돼. –