手机
当前位置:查字典教程网 >编程开发 >C#教程 >c# 获得局域网主机列表实例
c# 获得局域网主机列表实例
摘要:usingSystem;usingSystem.Drawing;usingSystem.Collections;usingSystem.Co...

usingSystem;

usingSystem.Drawing;

usingSystem.Collections;

usingSystem.ComponentModel;

usingSystem.Windows.Forms;

usingSystem.Data;

usingSystem.Net;

usingSystem.Threading;

namespaceWindowLanSearch

{

///<summary>

///Form1的摘要说明。

///</summary>

publicclassForm1:System.Windows.Forms.Form

{

privateSystem.Windows.Forms.TextBoxtextBox1;

privateSystem.Windows.Forms.Buttonbutton1;

privatestring[,]LanHost;

privateSystem.Windows.Forms.ProgressBarprogressBarSearch;

privateThread[]thread;

privateSystem.Windows.Forms.ListViewlistView1;

privateSystem.Windows.Forms.ColumnHeadercolumnHeader1;

privateSystem.Windows.Forms.ColumnHeadercolumnHeader2;

privatestringstr;

///<summary>

///必需的设计器变量。

///</summary>

privateSystem.ComponentModel.Containercomponents=null;

publicForm1()

{

//

//Windows窗体设计器支持所必需的

//

InitializeComponent();

InitLanHost();

progressBarSearch.Maximum=255;

//

//TODO:在InitializeComponent调用后添加任何构造函数代码

//

}

///<summary>

///数组初始化

///</summary>

privatevoidInitLanHost()

{

LanHost=newstring[255,2];

for(inti=0;i<255;i++)

{

LanHost[i,0]="";

LanHost[i,1]="";

}

}

///<summary>

///清理所有正在使用的资源。

///</summary>

protectedoverridevoidDispose(booldisposing)

{

if(disposing)

{

if(components!=null)

{

components.Dispose();

}

}

base.Dispose(disposing);

}

#regionWindows窗体设计器生成的代码

///<summary>

///设计器支持所需的方法-不要使用代码编辑器修改

///此方法的内容。

///</summary>

privatevoidInitializeComponent()

{

this.textBox1=newSystem.Windows.Forms.TextBox();

this.button1=newSystem.Windows.Forms.Button();

this.progressBarSearch=newSystem.Windows.Forms.ProgressBar();

this.listView1=newSystem.Windows.Forms.ListView();

this.columnHeader1=newSystem.Windows.Forms.ColumnHeader();

this.columnHeader2=newSystem.Windows.Forms.ColumnHeader();

this.SuspendLayout();

//

//textBox1

//

this.textBox1.Location=newSystem.Drawing.Point(24,40);

this.textBox1.Multiline=true;

this.textBox1.Name="textBox1";

this.textBox1.ScrollBars=System.Windows.Forms.ScrollBars.Both;

this.textBox1.Size=newSystem.Drawing.Size(176,296);

this.textBox1.TabIndex=0;

this.textBox1.Text="";

//

//button1

//

this.button1.Location=newSystem.Drawing.Point(456,40);

this.button1.Name="button1";

this.button1.TabIndex=1;

this.button1.Text="开始搜索";

this.button1.Click+=newSystem.EventHandler(this.button1_Click);

//

//progressBarSearch

//

this.progressBarSearch.Location=newSystem.Drawing.Point(32,360);

this.progressBarSearch.Name="progressBarSearch";

this.progressBarSearch.Size=newSystem.Drawing.Size(490,24);

this.progressBarSearch.TabIndex=2;

//

//listView1

//

this.listView1.Columns.AddRange(newSystem.Windows.Forms.ColumnHeader[]{

this.columnHeader1,

this.columnHeader2});

this.listView1.Location=newSystem.Drawing.Point(248,40);

this.listView1.Name="listView1";

this.listView1.Size=newSystem.Drawing.Size(184,288);

this.listView1.TabIndex=5;

//

//columnHeader1

//

this.columnHeader1.Text="dddd";

//

//columnHeader2

//

this.columnHeader2.Text="sssss";

//

//Form1

//

this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);

this.ClientSize=newSystem.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]

staticvoidMain()

{

Application.Run(newForm1());

}

privatevoidbutton1_Click(objectsender,System.EventArgse)

{

LanSearch();

}

///<summary>

///局域网搜索事件

///</summary>

privatevoidLanSearch()

{

thread=newThread[255];

ThreadStartthreadMethod;

ThreadthreadProgress=newThread(newThreadStart(progressSearch));

threadProgress.Start();

stringlocalhost=(Dns.GetHostByName(Dns.GetHostName())).AddressList[0].ToString();//本地主机IP地址

str=localhost.Substring(0,localhost.LastIndexOf("."));

for(inti=0;i<255;i++)//建立255个线程扫描IP

{

threadMethod=newThreadStart(LanSearchThreadMethod);

thread[i]=newThread(threadMethod);

thread[i].Name=i.ToString();

thread[i].Start();

if(!thread[i].Join(100))//Thread.Join(100)不知道这处这么用对不对,感觉没什么效果一样

{

thread[i].Abort();

}

}

GetLanHost();

listLanHost();

}

///<summary>

///多线程搜索方法

///</summary>

privatevoidLanSearchThreadMethod()

{

intCurrently_i=Convert.ToUInt16(Thread.CurrentThread.Name);//当前进程名称

IPAddressScanIP=IPAddress.Parse(str+"."+Convert.ToString(Currently_i+1));//获得扫描IP地址

IPHostEntryScanHost=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>

privatevoidGetLanHost()

{

for(inti=0;i<255;i++)

if(LanHost[i,0]!="")

{

textBox1.Text=textBox1.Text+LanHost[i,1]+":"+LanHost[i,0]+"rn";

}

}

///<summary>

///listview1显示搜索主机

///</summary>

privatevoidlistLanHost()

{

listView1.View=View.List;

ListViewItemaa;

for(inti=0;i<255;i++)

{

if(LanHost[i,0]!="")

{

aa=newListViewItem();

aa.Text=LanHost[i,1];

aa.Tag=LanHost[i,0];

listView1.Items.Add(aa);

}

}

}

///<summary>

///进度条处理线程

///</summary>

privatevoidprogressSearch()

{

//label1.Text="进度条只是时间估计,不是真实搜索进度!";

progressBarSearch.Value=0;

for(inti=0;i<255;i++)

{

progressBarSearch.Value=progressBarSearch.Value+1;

Thread.Sleep(100);

}

}

}

}

遗憾之处:因搜索较慢,没有实现真实的搜索进度。

不懂之处:实现文字提示时,当在鼠标事件首尾插入

privatevoidbutton1_Click(objectsender,System.EventArgse)

{

lab1.Text=“开始搜索”;//新插入

LanSearch();

lab1.Text=“结束搜索”;//新插入

}

文本提示时,在lab1上始终不能及时显示,而是等所有线程结束后才显示“结束搜索“。

【c# 获得局域网主机列表实例】相关文章:

使用C#实现在屏幕上画图效果的代码实例

C# 一个WCF简单实例

C# Guid.NewGuid获得随机数

c#解压文件的实例方法

C# 创建文本文件写入读取实现代码

C# 对XML操作入门实例

C# 实现简单打印的实例代码

c# 备忘录模式

C#获取计算机名,IP,MAC信息实现代码

获取字符串中的汉字拼音首字母

精品推荐
分类导航