첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 네트워크 상태 조사하기

----------------------------------------------------------------------------------------------------


TestCheckNetworkStatus.zip


MainForm.cs

 

 

using System;

using System.Net.NetworkInformation;

using System.Threading;

using System.Windows.Forms;

 

namespace TestCheckNetworkStatus

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : Form

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Delegate

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region 리스트 뷰 항목 추가 대리자 - AddListViewItemDelegate(localIPAddress, localPort, remoteIPAddress, remotePort, status)

 

        /// <summary>

        /// 리스트 뷰 항목 추가 대리자

        /// </summary>

        /// <param name="localIPAddress">로컬 IP 주소</param>

        /// <param name="localPort">로컬 포트</param>

        /// <param name="remoteIPAddress">원격 IP 주소</param>

        /// <param name="remotePort">원격 포트</param>

        /// <param name="status">상태</param>

        private delegate void AddListViewItemDelegate(string localIPAddress, string localPort, string remoteIPAddress,

            string remotePort, string status);

 

        #endregion

        #region 리스트 뷰 지우기 대리자 - ClearListViewDelegate()

 

        /// <summary>

        /// 리스트 뷰 지우기 대리자

        /// </summary>

        private delegate void ClearListViewDelegate();

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 리스트 뷰 지우기 대리자

        /// </summary>

        private ClearListViewDelegate clearListViewDelegate = null;

 

        /// <summary>

        /// 리스트 뷰 항목 추가 대리자

        /// </summary>

        private AddListViewItemDelegate addListViewItemDelegate = null;

 

        /// <summary>

        /// 리스트 뷰 갱신 스레드

        /// </summary>

        private Thread refreshListViewThread = null;

 

        /// <summary>

        /// IP 글로벌 속성들

        /// </summary>

        private IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        //////////////////////////////////////////////////////////////////////////////// Event

 

        #region 폼 로드시 처리하기 - Form_Load(sender, e)

 

        /// <summary>

        /// 폼 로드시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void Form_Load(object sender, EventArgs e)

        {

            this.clearListViewDelegate   = new ClearListViewDelegate(ClearListView);

            this.addListViewItemDelegate = new AddListViewItemDelegate(AddListViewItem);

 

            this.refreshListViewThread = new Thread(RefreshListView);

 

            this.refreshListViewThread.Start();

        }

 

        #endregion

        #region 폼을 닫을 경우 처리하기 - Form_FormClosing(sender, e)

 

        /// <summary>

        /// 폼을 닫을 경우 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void Form_FormClosing(object sender, FormClosingEventArgs e)

        {

            if(this.refreshListViewThread != null)

            {

                this.refreshListViewThread.Abort();

            }

 

            Application.ExitThread();

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////// Function

 

        #region 리스트 뷰 지우기 - ClearListView()

 

        /// <summary>

        /// 리스트 뷰 지우기

        /// </summary>

        private void ClearListView()

        {

            this.listView.Items.Clear();

        }

 

        #endregion

        #region 리스트 뷰 항목 추가하기 - AddListViewItem(localIPAddress, localPort, remoteIPAddress, remotePort, status)

 

        /// <summary>

        /// 리스트 뷰 항목 추가하기

        /// </summary>

        /// <param name="localIPAddress">로컬 IP 주소</param>

        /// <param name="localPort">로컬 포트</param>

        /// <param name="remoteIPAddress">원격 IP 주소</param>

        /// <param name="remotePort">원격 포트</param>

        /// <param name="status">상태</param>

        private void AddListViewItem(string localIPAddress, string localPort, string remoteIPAddress, string remotePort, string status)

        {

            ListViewItem listViewItem = this.listView.Items.Add(localIPAddress);

 

            listViewItem.SubItems.Add(localPort      );

            listViewItem.SubItems.Add(remoteIPAddress);

            listViewItem.SubItems.Add(remotePort     );

            listViewItem.SubItems.Add(status         );

        }

 

        #endregion

 

        #region 리스트 뷰 갱신하기 - RefreshListView()

 

        /// <summary>

        /// 리스트 뷰 갱신하기

        /// </summary>

        private void RefreshListView()

        {

            while(true)

            {

                Invoke(this.clearListViewDelegate);

 

                TcpConnectionInformation[] tcpConnectionInformationArray = this.ipGlobalProperties.GetActiveTcpConnections();

 

                foreach(TcpConnectionInformation tcpConnectionInformation in tcpConnectionInformationArray)

                {

                    Invoke

                    (

                        this.addListViewItemDelegate,

                        tcpConnectionInformation.LocalEndPoint.Address.ToString(),

                        tcpConnectionInformation.LocalEndPoint.Port.ToString(),

                        tcpConnectionInformation.RemoteEndPoint.Address.ToString(),

                        tcpConnectionInformation.RemoteEndPoint.Port.ToString(),

                        tcpConnectionInformation.State.ToString()

                    );

                }

 

                Thread.Sleep(30000);

            }

        }

 

        #endregion

    }

}

 

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요