Programming/C#

C# 네트워크 통신 연결 상태 확인 하는 방법 (Ping / NetworkInterface 활용)

JeongKyun 2022. 3. 31.
반응형

서론

보통 비투비간 프로그램 연동을 하기위해 만들어진 프로토콜에는 기본적으로 상태체크를 한다. 이러한 상태체크는 정해진 주기마다 보내는 폴링방식으로 확인할 수도 있고 또는 연결과 끊김에 대해서 이벤트를 발생시켜서 관리하는 등 여러 가지 방법으로 체크를 한다.

 

이번 글에서는 통신이 확립되기 전 본인의 네트워크 상태와 지정한 IP의 통신 상태를 얻어올 수 있는 방법에 대해 소개하려한다.

 

참고로 필자는 정해진 프로토콜 없이 해당 장비에게 상태체크를 해보기 위해 구현하였다.

 


 

소스

        static void Main(string[] args)
        {
            Console.Write(IsCheckNetwork());

            Console.ReadKey();
        }
        
        private static bool IsCheckNetwork()
        {
            bool networkState = NetworkInterface.GetIsNetworkAvailable();
            bool pingResult = true;

            //네트워크가 연결이 되어있다면
            if (networkState)
            {
                string addr = "192.168.0.71"; // 상태 체크 ip 입력
                Ping pingSender = new Ping();
                
                //Ping 체크 (IP, TimeOut 지정)
                PingReply reply = pingSender.Send(addr, 300);
                
                //상태가 Success이면 true반환
                pingResult = reply.Status == IPStatus.Success;

            }

            return networkState & pingResult;
        }

위에서 사용한 NetworkInterface에 대해서 간략히 정리하자면,

 

해당 클래스는 네트워크가 연결되어있으면 True를 리턴하는 특징을 갖고있다. 그런데 여기서 네트워크 연결은 로컬 네트워크만 연결되어있는 경우도 True로 포함한다.

 

그렇기에 인터넷으로 연결되어있진 않지만 로컬 네트워크 상에만 있는 경우도 네트워크가 연결되어 있다고 판단하는 클래스이다.

 

이제 위의 내용 프로세스를 설명해보면,

네트워크 상태를 먼저 확인 한 후 Ping 클래스를 활용하여 상태체크를 하는 방법에 대해 구현한 방식이다.

 

보통은 프로토콜에 상태체크 규약이 있지만 혹시 없거나 따로 원론적으로 상태 체크를 해보고싶은 경우 사용하면 될 것 같다.

 

마지막으로 아래 실제 출력이 어떻게 되는지 보여주고 마무리하겠다.

 


 

실제 출력 이미지

 

댓글

💲 많이 본 글