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就可以了
查看全文
相关阅读:
[贪心] JZOJ P3757 随机生成器
[kmp] JZOJ P3756 动物园
[kmp] JZOJ P3756 动物园
[记忆化搜索] JZOJ P3767 路径
[dfs序][线段树][并查集] JZOJ P3766 大融合
[归并][随机算法] JZOJ P3765 想法
[枚举][dfs] JOZJ P3749 Fox and City
[hash] JZOJ P3669 抄卡组
[dfs][图] 洛谷 P1330 封锁阳光大学
[并查集]NOIP 2015 Day1 信息传递
原文地址:https://www.cnblogs.com/kokoliu/p/519517.html
最新文章
CSS3中颜色线性渐变实战
举例详解CSS中的的优先级
举例详解CSS中的继承
jQuery中$(function() {});问题详解
JavaScript中var关键字的使用详解
javascript中substring()、substr()、slice()的区别
JavaScript常用标签和方法总结
jquery加载页面的方法(页面加载完成就执行)
[dp]Luogu P1169 棋盘制作
[贪心][模拟]SSL P1081 旅行家的预算
热门文章
[高精度][贪心]Luogu P1080 国王游戏
[dp]Luogu P1070 道路游戏
[贪心][前缀和] JZOJ P1795 教主的别墅
[树形dp][组合数] JZOJ P1794 保镖排队
[环上dp] JZOJ P1793 教主泡嫦娥
[二分][排序] JZOJ P1792 教主的花园
[dfs][2-sat] JZOJ P3796 议案决定
[计数dp][组合数] JZOJ P1975 连边
[dfs] 洛谷 P1242 新汉诺塔
[模拟] JZOJ P3767 A+B
Copyright © 2011-2022 走看看