Excep(0, Ai) = CInt(ipexcep.Attributes(0).Value)
Excep(1, Ai) = CInt(ipexcep.Attributes(1).Value)
Ai = Ai 1
Next
End If
For Ai = 0 To ipexcepCount - 1
If i >= Excep(0, Ai) And i <= Excep(1, Ai) Then
Console.WriteLine("跳过保留地址: " & LanID & i.ToString)
GoTo SkipIP
End If
Next
machineIP = LanID & i.ToString ‘IP地址
‘以下触发线程以,得到服务状态
Dim getSt As New GetStatus(machineIP, ServiceName, table)
Dim GetStThread As New Thread(New ThreadStart(AddressOf getSt.GetStausF))
GetStThread.Start()
ThreadCounterStarted = ThreadCounterStarted 1‘启动线程数加1
Console.WriteLine("线程" & machineIP & " 启动。检测 " & ServiceName)
‘每启动100个线程,程序主线程停止15秒,避免太多线程造成内存溢出
If (ThreadCounterStarted Mod 100) = 0 Then
Console.WriteLine("等待 .......")
Thread.CurrentThread.Sleep(15000)
GC.Collect() 'force garbage collection to aviod outOfMemory when run with long IP list
End If
SkipIP:
Next
Next
Console.WriteLine("Exiting program ...") ‘所有线程都已触发
Finish:
Thread.CurrentThread.Sleep(5000) ‘以下程序等待所有线程结束
GC.Collect()
If ThreadCounterStopped = ThreadCounterStarted And HostInfoThreadCounter.counter = HostInfoThreadCounter.counterSTOP Then‘如果触发线程等于结束线程
Dim row As Data.DataRow
For Each row In ds.Tables(table).Rows
row.Item("SysTime") = Now
Next
Purgestr = "delete " & table
Dim com1 As New SqlClient.SqlCommand(Purgestr, conn1)
com1.ExecuteNonQuery() ‘删除旧记录
sa.InsertCommand = combu.GetInsertCommand
sa.Update(ds, table) ' 将新记录写入数据库
Else
GoTo Finish ' goto finish and wait another 30 seconds
End If
End Sub
可以利用如下命令在DOS窗口启动该程序。
Scanservice –i iplist.xml –d dbinfo.xml
2. SCANSERVICE 数据库
该数据库保存保存程序运行结果,以便用WEB等方式展现出来。以下是建立表的脚本,包含域名,用户名,机器名,IP以及服务状态。
CREATE TABLE [dbo].[Service] (
[IP] [varchar] (50) NULL ,
[状态] [varchar] (50) NULL ,
[用户名] [varchar] (50) NULL ,
[机器名] [varchar] (50) NULL ,
[MAC地址] [varchar] (50) NULL ,
[域] [varchar] (50) NULL ,
[超时] [varchar] (10) NULL ,
[时间安] [DateTime] (8) NULL ,
)
总结:
以上是一个完整的方法,也是比较简单明晰的解决方法,如果要求技巧和性能的话,还有一些地方可以做些改进,比如对线程池的使用。另外还有一些方面需要大家自己完成,比如将数据库中的信息以WEB的方式展现出来。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



