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上始终不能及时显示,而是等所有线程结束后才显示“结束搜索“。
初学winForm编程,太多的要学了。
望高手指点一二

时间: 2024-10-09 07:52:42

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

c# 获得局域网主机列表实例_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 的摘要说明. /// </s

php实现的美国50个州选择列表实例

  这篇文章主要介绍了php实现的美国50个州选择列表实例,可实现让当前州为选中状态的功能,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了php实现的美国50个州选择列表.分享给大家供大家参考.具体如下: 这里展示的是php生成的美国50个州的选择列表,自动选择当前州 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 4

电脑连接局域网主机提示可能没有权限使用网络资源怎么解决

  电脑连接局域网主机提示可能没有权限使用网络资源怎么解决           1.连不上的问题在于主机的时候,会提示Windows无法访问printer,要么主机没开机没联网,要么就是guest账户的问题; 2.如果主机正常,其他电脑出现"可能没有权限使用网络资源"的提示,则需要进行Windows凭据设置; 3.打开控制面板→用户账户→管理windows凭据→添加windows凭据; 4.第一栏写IP地址或者计算机名都可以(如果在公司IP地址不知道就问网管,如果在家或者小办公室,登上

C#生成不重复随机数列表实例_C#教程

复制代码 代码如下: /// <summary>        /// 生成不重复随机数列表实例        /// </summary>        /// <param name="count">不重复数数量</param>        /// <returns>不重复数列表</returns>        private static List<int> GetRandomList(int

《构建高可用VMware vSphere 5.X虚拟化架构》——1.6 ESXi主机配置实例

1.6 ESXi主机配置实例 1.6.1 配置实例一:某中学ESXi主机配置实例 某中学VMware vSphere 5.0虚拟化项目,此项目一共部署了15台ESXi主机,选择的物理服务器是Dell PowerEdge R720(服务器配置见表1-6-1).1.6.2 配置实例二:某软件外包公司ESXi主机的配置实例 某软件外包公司VMware vSphere 5.0虚拟化项目,此项目一共部署了8台ESXi主机,选择的物理服务器是组装服务器(服务器配置见表1-6-2).

PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例_php实例

说起来做这个功能还真是一时好奇.前段时间在做一个淘客网站的时候,想到是否能抓取到淘宝商品的买家秀呢?经过一番折腾发现,淘宝商品用户评价信息是通过Ajax来调取的,通过嗅探网址发现,评论数据的请求接口是: https://rate.tmall.com/list_detail_rate.htm?itemId=524394294771&spuId=341564036&sellerId=100414600&order=3&currentPage=1&append=0&

利用java实现对实验室局域网主机或宿舍网络主机的扫描监控,要 求输出主机名、IP 地址、MAC 地址等信息

问题描述 利用Java实现对实验室局域网主机或宿舍网络主机的扫描监控,要求输出主机名.IP地址.MAC地址等信息,做个简单的界面,跪求源代码 解决方案

asp.net i/o创建目录列表实例

asp教程.net i/o创建目录列表实例 下面的代码示例显示了如何使用 io 类来创建目录列表. [c#] using system; using system.io; class directorylister {   public static void main(string[] args)   {   directoryinfo dir = new directoryinfo(".");   foreach (fileinfo f in dir.getfiles("

jQuery实例select双向选择列表实例教程

提示:您可以先修改部分代码再运行 先看效果图: 列表实例教程-jquery 列表双向选择"> 完整代码如下所示:  代码如下 复制代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator&qu