네트워크 관련해서는 아무것도 모르는 사용자 입장.
C# 프로그램 개발 중, 로컬 및 네트워크에 연결된 다른 컴퓨터들의 파일/디렉토리를 액세스할 필요가 생겼다.
그런데 네트워크가 다운되어 있을 때 예전에 액세스되었던 파일/디렉토리가 여전히 유효한 지 확인하려고
- Directory.Exists()
- File.Exists()
들을 사용하면 어플리케이션이 한동안 먹통이 된다.
그래서 원격 컴퓨터의 연결 상태를 빠르게 점검할 수 있는 방법을 찾기 시작하였다.
1. WebRequest (예제 링크)
작은 수의 원격 파일 점검은 무난히 진행됨.
그러나 원격 디렉토리를 점검하는 것은 안된다.
2. Ping 또는 WMI (예제 링크)
WMI를 사용하는 방법은 아예 안되고, ping을 사용하는 방식은 잘 되긴 하는데 원격 컴퓨터가 다운되어 있으면 여전히 어플리케이션 응답이 느리다.
3. SendPingAsync (예제 링크)
ping 방식이긴 한데, 비동기 ping send 함수를 사용하는 것이다.
최종적으로 3번 링크 글의 도움을 받아 C#의 async/await 및 Ping.SendPingAsync()를 사용하여 응답성을 확보할 수 있었다.
using System.Net.NetworkInformation;
// host는 "Uri uri = new Uri(remotePath);" 로 얻을 수 있음
private static async System.Threading.Tasks.Task<bool> CheckConnectivity(string host)
{
bool retVal = false;
try
{
PingReply reply = await pingSender.SendPingAsync(host, timeout, buffer, options);
retVal = (reply.Status == IPStatus.Success);
}
catch
{
retVal = false;
}
return retVal;
}


