c\#랜 호스트 목록 인 스 턴 스 획득

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Net; using System.Threading; namespace WindowLanSearch { ///  /// Form1 요약 설명  public class Form1 : System.Windows.Forms.Form {   private System.Windows.Forms.TextBox textBox1;   private System.Windows.Forms.Button button1;   private string[,] LanHost;   private System.Windows.Forms.ProgressBar progressBarSearch;   private Thread[]  thread;   private System.Windows.Forms.ListView listView1;   private System.Windows.Forms.ColumnHeader columnHeader1;   private System.Windows.Forms.ColumnHeader columnHeader2;   private string str;   ///    /// 필요 한 디자이너 변수.  ///    private System.ComponentModel.Container components = null;   public Form1()   {    //    // Windows 창 디자이너 지원 에 필요 한   //    InitializeComponent();    InitLanHost();    progressBarSearch.Maximum = 255;    //    // TODO: ...에 있다 InitializeComponent 호출 후 구조 함수 코드 추가   //   }   ///    /// 배열 초기 화  ///    private void InitLanHost()   {    LanHost = new string[255,2];    for (int i=0;i<255;i++)    {     LanHost[i,0] = "";     LanHost[i,1] = "";    }   }   ///    /// 사용 중인 모든 자원 을 정리 합 니 다.  ///    protected override void Dispose( bool disposing )   {    if( disposing )    {     if (components != null)      {      components.Dispose();     }    }    base.Dispose( disposing );   }   #region Windows 창 디자이너 가 만 든 코드  ///    /// 디자이너 지원 에 필요 한 방법 - 코드 편집기 로 수정 하지 마 십시오.  /// 이 방법의 내용.  ///    private void InitializeComponent()   {    this.textBox1 = new System.Windows.Forms.TextBox();    this.button1 = new System.Windows.Forms.Button();    this.progressBarSearch = new System.Windows.Forms.ProgressBar();    this.listView1 = new System.Windows.Forms.ListView();    this.columnHeader1 = new System.Windows.Forms.ColumnHeader();    this.columnHeader2 = new System.Windows.Forms.ColumnHeader();    this.SuspendLayout();    //     // textBox1    //     this.textBox1.Location = new System.Drawing.Point(24, 40);    this.textBox1.Multiline = true;    this.textBox1.Name = "textBox1";    this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both;    this.textBox1.Size = new System.Drawing.Size(176, 296);    this.textBox1.TabIndex = 0;    this.textBox1.Text = "";    //     // button1    //     this.button1.Location = new System.Drawing.Point(456, 40);    this.button1.Name = "button1";    this.button1.TabIndex = 1;    this.button1.Text = "검색 시작";   this.button1.Click += new System.EventHandler(this.button1_Click);    //     // progressBarSearch    //     this.progressBarSearch.Location = new System.Drawing.Point(32, 360);    this.progressBarSearch.Name = "progressBarSearch";    this.progressBarSearch.Size = new System.Drawing.Size(490, 24);    this.progressBarSearch.TabIndex = 2;    //     // listView1    //     this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {                       this.columnHeader1,                       this.columnHeader2});    this.listView1.Location = new System.Drawing.Point(248, 40);    this.listView1.Name = "listView1";    this.listView1.Size = new System.Drawing.Size(184, 288);    this.listView1.TabIndex = 5;    //     // columnHeader1    //     this.columnHeader1.Text = "dddd";    //     // columnHeader2    //     this.columnHeader2.Text = "sssss";    //     // Form1    //     this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);    this.ClientSize = new System.Drawing.Size(544, 413);    this.Controls.Add(this.listView1);    this.Controls.Add(this.progressBarSearch);    this.Controls.Add(this.button1);    this.Controls.Add(this.textBox1);    this.Name = "Form1";    this.Text = "Form1";    this.ResumeLayout(false);   }   #endregion   ///    /// 응용 프로그램의 주 입구 점.  ///    [STAThread]   static void Main()    {    Application.Run(new Form1());   }   private void button1_Click(object sender, System.EventArgs e)   {    LanSearch();   }   ///    /// 랜 검색 이벤트  ///    private void LanSearch()   {    thread = new Thread[255];    ThreadStart threadMethod;    Thread threadProgress = new Thread(new ThreadStart(progressSearch));    threadProgress.Start();    string localhost = (Dns.GetHostByName(Dns.GetHostName())).AddressList[0].ToString();  //로 컬 호스트 IP 주소   str = localhost.Substring(0,localhost.LastIndexOf("."));    for (int i=0;i<255;i++)  //255 개의 스 레 드 스 캔 IP 만 들 기   {     threadMethod = new ThreadStart(LanSearchThreadMethod);     thread[i] = new Thread(threadMethod);     thread[i].Name = i.ToString();     thread[i].Start();     if (!thread[i].Join(100))    //Thread.Join(100)여기 이렇게 쓰 는 게 맞 는 지 모 르 겠 어 요.별로 효과 가 없 는 것 같 아 요.    {      thread[i].Abort();     }    }    GetLanHost();    listLanHost();   }   ///    /// 다 중 스 레 드 검색 방법  ///    private void LanSearchThreadMethod()   {    int Currently_i = Convert.ToUInt16(Thread.CurrentThread.Name);  //현재 프로 세 스 이름   IPAddress ScanIP = IPAddress.Parse( str + "."+Convert.ToString(Currently_i +1));  //스 캔 IP 주소 가 져 오기   IPHostEntry ScanHost = null;    ScanHost = Dns.GetHostByAddress(ScanIP);   //스 캔 IP 주소 호스트 정보 가 져 오기   if (ScanHost != null)    {     LanHost[Currently_i,0] = ScanIP.ToString();     LanHost[Currently_i,1] = ScanHost.HostName;    }    //progressBarSearch.Value = progressBarSearch.Value +1;   }   ///    /// 텍스트 상자 에 호스트 이름과 IP 목록 표시  ///    private void GetLanHost()   {    for (int i=0;i<255;i++)     if ( LanHost[i,0] !="")     {      textBox1.Text =textBox1.Text + LanHost[i,1] +":" +LanHost[i,0] + "\r";     }   }   ///    /// listview1 검색 호스트 보이 기  ///    private void listLanHost()   {    listView1.View = View.List;    ListViewItem aa ;    for (int i=0;i<255;i++)    {     if ( LanHost[i,0] !="")     {      aa= new ListViewItem();      aa.Text = LanHost[i,1];      aa.Tag = LanHost[i,0];      listView1.Items.Add(aa);     }    }   }   ///    /// 진행 스 레 드  ///    private void progressSearch()   {    //label1.Text = "진도 표 는 시간 추정 일 뿐 실제 검색 진도 가 아니다!"   progressBarSearch.Value = 0;    for (int i=0;i<255;i++)    {     progressBarSearch.Value = progressBarSearch.Value + 1;     Thread.Sleep(100);    }   } } } 아 쉬 운 점:검색 이 느 려 서 실제 검색 진 도 를 이 루 지 못 했 습 니 다.모 르 는 점:텍스트 알림 을 실현 할 때 마우스 이벤트 의 맨 끝 에 private 를 삽입 합 니 다. void button1_Click(object sender, System.EventArgs e)   {     lab1.Text = “검색 시작 하기;      //새로 삽입        LanSearch();     lab1.Text = “검색 끝";     //새로 삽입  } 텍스트 알림 을 표시 할 때 lab 1 에 서 는 항상 제때에 표시 되 지 않 고 모든 스 레 드 가 끝 난 후에 야'검색 종료'가 표 시 됩 니 다.

좋은 웹페이지 즐겨찾기