[C#] Ping Test Code

Posted at 2009. 12. 15. 16:33 | Posted in 프로그래밍
[C#] Ping Test Code

반응형
네트웍 프로그램을 개발할시 Connect 로 접속할때 IP가 살아 있지 않으면 딜레이가 많이 생깁니다.

하나의 IP에 단발성으로 Connect 를 할거면 딜레이가 생겨도 상관이 없지만 여러 IP에
Connect 를 시도 해야 할때는 이 딜레이 때문에 프로그램이 꼭 다운된듯한 느낌이 들어 사용자에게 오해를 불러 일으킬수 있는 요지가 있어 이 딜레이를 없애는게 좋은거 같습니다.

C# 내부 함수로는 이 딜레이를 없애는 방법은 없는거 같습니다. 그럼 방법은 ping 을 날려 보고 살아 있으면 Connect를 하고 죽어있으면 다른 IP로 넘어 가는 방법을 택해야 하는거 같습니다.

C#에서 Ping Test Code 입니다.

public bool Connect(string ip, int port)
{
    try
    {
        //IP Address 할당
        this.ipAddress = IPAddress.Parse(ip);

        //TCP Client 선언
        this.tcpClient = new TcpClient(AddressFamily.InterNetwork);

        Ping pingSender = new Ping();
        PingOptions options = new PingOptions();

        // Use the default Ttl value which is 128,
        // but change the fragmentation behavior.
        options.DontFragment = true;

        // Create a buffer of 32 bytes of data to be transmitted.
        string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
        byte[] buffer = Encoding.ASCII.GetBytes(data);
        int timeout = 120;
        PingReply reply = pingSender.Send(this.ipAddress, timeout, buffer, options);
       
        if (reply.Status == IPStatus.Success)
        {
            // Ping 성공시 Connect 연결 시도
            this.tcpClient.NoDelay = true;
            this.tcpClient.Connect(ipAddress, port);

            this.ntwStream = tcpClient.GetStream();              
        }
        else
        {
            // Ping 실패시 강제 Exception
            throw new Exception();
        }

        return true;
    }
    catch (Exception ex)
    {
        //MessageBox.Show("Connect Fail... : " + ex);
        return false;
    }
}

참고한자료 :
msdn - Ping 클래스(System.Net.NetworkInformation)

'프로그래밍' 카테고리의 다른 글

[C#]DataGridView Data를 Excel 파일로 저장(Export)  (22) 2010.01.14
C# Content-Transfer-Encoding 설정 코드  (0) 2009.07.04
모바일 게임 개발  (17) 2009.04.14
Effective C# 정리  (0) 2009.04.08