zoukankan
html css js c++ java
c#初学日记:多线程扫描网络计算机
首先定义一个UpDataList,以后用于创建线程实例
public
delegate
void
UpDataList(
string
sIP,
string
sHostName);
定义一个名叫ping的class,用于计算机的扫描模块
public
class
ping
{
public
UpDataList ul;a
public
string
sIP;
//
接收传递过来的IP地址
public
string
sHostName;
//
向主进程传递计算机名
public
string
sMac;
//
向主进程传递远程主机MAC地址
public
string
sUser;
//
向主进程传递远程主机当前用户
public
string
sHDsize;
//
硬盘容量
public
string
sHDuse;
//
已用空间
public
string
sHDfree;
//
剩余空间
public
void
scan()
{
IPAddress myIP
=
IPAddress.Parse(sIP);
try
{
IPHostEntry myHost
=
Dns.GetHostByAddress(myIP);
//
根据IP获得主机名
sHostName
=
myHost.HostName.ToString();
}
catch
{
sHostName
=
""
;
}
if
(sHostName
==
""
)
sHostName
=
"
no
"
;
if
(ul
!=
null
)
ul(sIP,sHostName);
}
}
扫描数据写入listview中(这部分是在线程中调用的。其中写出时要用lock锁住listView1,不让其它线程写入)
void
UpDataMyList(
string
sIP,
string
sHostName)
{
//
写入扫描数据
if
(sHostName
!=
"
no
"
)
//
主机在线是就写入数据
{
lock
(
this
.listView1)
//
锁住listView1,保证在写入时的独占权
{
ListViewItem listViewItem
=
new
ListViewItem(
new
string
[]
{sHostName,sIP}
);
listView1.Items.Add(listViewItem);
listBox1.Items.Add(
"
扫描
"
+
sIP
+
"
完成
"
);
}
}
else
{
listBox1.Items.Add(sIP
+
"
不在线
"
);
}
}
其中的网段部分考虑以后可以用ini文件等提供,可以由用户自己设想要扫描的内容。现在我自己手工加了4个网段。由扫描10网段为例:
private
void
treeView1_AfterSelect(
object
sender, System.Windows.Forms.TreeViewEventArgs e)
{
if
(e.Node.Text.ToString()
==
"
扫描10网段
"
)
{
listView1.Items.Clear();
//
清空listView1
listBox1.Items.Clear();
//
清空listBox1
//
创建多个线程实例
int
min
=
1
;
int
max
=
254
;
//
min和max定义扫描的范围是192.168.10.1-192.168.10.254
string
Mask
=
"
192.168.10.
"
;
int
threadNum
=
max
-
min
+
1
;
Thread[] myThread
=
new
Thread[threadNum];
for
(
int
i
=
min;i
<=
max;
++
i)
{
try
{
int
k
=
max
-
i;
ping HostPing
=
new
ping();
//
创建一个ping的实例
HostPing.sIP
=
Mask
+
i.ToString();
//
获得一个IP
HostPing.ul
=
new
UpDataList(UpDataMyList);
//
向主线程传送IP地址
myThread[k]
=
new
Thread(
new
ThreadStart(HostPing.scan));
//
初始化一个线程的实例
myThread[k].Start();
}
catch
{
}
}
}
}
如上代码运行后能正常用多线程扫描10网段了。总算完成了一部分
忘记加上初始化listView1的代码了:
private
void
setListView()
{
//
以下为初始化listView1的代码
listView1.View
=
View.Details;
//
设置listView1的显示方式为Details
listView1.MultiSelect
=
false
;
//
禁止选中多行
listView1.Scrollable
=
true
;
//
显示内容超出范围时,允许显示滚动条
listView1.FullRowSelect
=
true
;
//
当项目选中时,同行所有子项都突出显示
listView1.GridLines
=
true
;
//
显示网格线
//
初始化表头
listView1.Columns.Add(
"
电脑名称
"
,
100
,HorizontalAlignment.Left);
listView1.Columns.Add(
"
IP地址
"
,
150
,HorizontalAlignment.Left);
listView1.Columns.Add(
"
MAC地址
"
,
150
,HorizontalAlignment.Left);
listView1.Columns.Add(
"
当前用户
"
,
100
,HorizontalAlignment.Left);
listView1.Columns.Add(
"
硬盘空间
"
,
100
,HorizontalAlignment.Left);
listView1.Columns.Add(
"
已用空间
"
,
100
,HorizontalAlignment.Left);
listView1.Columns.Add(
"
剩余空间
"
,
100
,HorizontalAlignment.Left);
listView1.Columns.Add(
"
扫描时间
"
,
100
,HorizontalAlignment.Left);
}
在form_load事件中调用setListView就可以了
查看全文
相关阅读:
HTML5的进步与优势
jquery项目中一些比较常用的简单方法
MVC架构下将查询到的数据以表格形式展现出来
MVC架构下的导出为excel的代码
MVC中ViewData中数据转化成json形式的变量的方法
jQuery实现CheckBox全选,全不选,反选代码
C#导出到EXCEL
jQuery常见操作实现和常用函数方法总结
jQuery中运用正则表达式验证输入是否有特殊字符
DataTime+当前时间转换
原文地址:https://www.cnblogs.com/kokoliu/p/519517.html
最新文章
URL传送中文
ASP.NET 2.0新特性之 URL映射(转载)
细节质量态度(转)
类在析构时写个txt的 Log文件
关于“跨语言调用”和“CLS(公共语言规范)”的一点体会 (转贴)
软件项目中,管理者和开发者应该问自己什么
软件项目的核心风险
数据库主键的设计思考
两种自定义表单设计方案 [转贴]
Asp.Net Forums中对.Net中序列化和反序列化的应用
热门文章
用了VS2010,发点牢骚。
简单的窗体抖动托管c++
用APlayer Control控件播放音乐(axPlayer)
提示:违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条
用插件弄个语音阅读文本的小程序(托管C++)
关于开机启动自己的程序
获取本机IP和mac地址
实现文件下载c++/cli
c#获取安装的软件和路径(注册表)
非API程序模仿QQ截图。初学探讨。C#
Copyright © 2011-2022 走看看