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 에 서 는 항상 제때에 표시 되 지 않 고 모든 스 레 드 가 끝 난 후에 야'검색 종료'가 표 시 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: