源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c# 获得局域网主机列表实例

  • 时间:2021-08-18 05:15 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要: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 { /// <summary> /// Form1 的摘要说明。 /// </summary> 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;   /// <summary>   /// 必需的设计器变量。   /// </summary>   private System.ComponentModel.Container components = null;   public Form1()   {    //    // Windows 窗体设计器支持所必需的    //    InitializeComponent();    InitLanHost();    progressBarSearch.Maximum = 255;    //    // TODO: 在 InitializeComponent 调用后添加任何构造函数代码    //   }   /// <summary>   /// 数组初始化   /// </summary>   private void InitLanHost()   {    LanHost = new string[255,2];    for (int i=0;i<255;i++)    {     LanHost[i,0] = "";     LanHost[i,1] = "";    }   }   /// <summary>   /// 清理所有正在使用的资源。   /// </summary>   protected override void Dispose( bool disposing )   {    if( disposing )    {     if (components != null)      {      components.Dispose();     }    }    base.Dispose( disposing );   }   #region Windows 窗体设计器生成的代码   /// <summary>   /// 设计器支持所需的方法 - 不要使用代码编辑器修改   /// 此方法的内容。   /// </summary>   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   /// <summary>   /// 应用程序的主入口点。   /// </summary>   [STAThread]   static void Main()    {    Application.Run(new Form1());   }   private void button1_Click(object sender, System.EventArgs e)   {    LanSearch();   }   /// <summary>   /// 局域网搜索事件   /// </summary>   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();   }   /// <summary>   /// 多线程搜索方法   /// </summary>   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;   }   /// <summary>   /// 文本框显示主机名与IP列表   /// </summary>   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\n";     }   }   /// <summary>   /// listview1 显示搜索主机   /// </summary>   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);     }    }   }   /// <summary>   /// 进度条处理线程   /// </summary>   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 = “结束搜索”;     //新插入   } 文本提示时,在lab1上始终不能及时显示,而是等所有线程结束后才显示“结束搜索“。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部