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就可以了
查看全文
相关阅读:
xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
ubuntu安装CUDA及cuDNN
SpringCloud Alibaba微服务实战九
互联网人必看的中台理论,阿里腾讯架构师用大白话讲出来了
$("form > input">) 可以匹配表单下所有的子级input元素
$("form input") 可以匹配表单下所有的input元素
移动通信网络中的 GTP 协议
构建数据库云管平台 实现数据价值最大化
PostgreSQL的安装和启动方法大全
组选择器
原文地址:https://www.cnblogs.com/kokoliu/p/519517.html
最新文章
淘宝美食数据分析实战,三只松鼠居然这么强?
我在CSDN的大事件
:contains(text)选择器是一个比较实用的针对网页文本过滤的选择器
了解 MongoDB 看这一篇就够了
警示:强制关闭OGG进程触发bug致abended,详述处理过程
2.2.1 包含选择器
80%的程序员都不了解的调试技巧
堆-树(完全二叉树)
堆-树(完全二叉树)
堆-树(完全二叉树)
热门文章
堆-树(完全二叉树)
sqlserver 临时表、表变量、CTE的比较
sqlserver 临时表、表变量、CTE的比较
sqlserver 临时表、表变量、CTE的比较
sqlserver 临时表、表变量、CTE的比较
CentOS 配置mysql允许远程登录
[bug]未能从程序集“System.ServiceModel, Version=3.0.0.0问题解决
xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
Copyright © 2011-2022 走看看