多任务网段扫描练习

多线程扫描button事件:


注意使用多线程扫描需要为每个IP地址创建一个辅助线程
即为:
Thread t = new Thread(Scan);
                t.Start(str1);
核心代码:
int count = 0; Stopwatch wall; private void Button_Click(object sender, RoutedEventArgs e) { int start = int.Parse(a2.Text); int end = int.Parse(a3.Text); count = end - start+1; if(start>end) { MessageBox.Show("前地址大于后地址"); return; } a5.Items.Clear(); wall = Stopwatch.StartNew(); string str = this.a1.Text; for (int i = start; i <=end; i++) { string str1 = str + i.ToString(); Thread t = new Thread(Scan); t.Start(str1); } } int num; private object obj = new object(); private void Scan(object ip) //线程参数必须是object类型 { num = 0; Stopwatch w = Stopwatch.StartNew(); string host = ""; try { host = Dns.GetHostEntry(ip.ToString()).HostName; } catch { host = "(不在线)"; } w.Stop(); a5.Dispatcher.Invoke(() => a5.Items.Add( string.Format("扫描地址:{0},扫描用时:{1}毫秒,主机DNS名称:{2}", ip, w.ElapsedMilliseconds, host))); lock (obj) //分配锁 { num++; } if (num == count) { wall.Stop(); a5.Dispatcher.Invoke(() => this.a5.Items.Add("all time:" + wall.ElapsedMilliseconds+"毫秒")); } }

二、实验结果

猜你喜欢

转载自www.cnblogs.com/lcy-4/p/12685120.html