科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件多线程在Visual C#网络编程中的应用

多线程在Visual C#网络编程中的应用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Visual C#中使用的线程都是通过自命名空间System.Threading中的Thread类经常实例化完

作者:阿虎 来源:yesky 2007年11月13日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
四.Visual C#实现不基于多线程的网络计算机扫描程序

  以下是在Visual C#实现不基于多线程的网络计算机扫描程序步骤:

  1. 启动Visual Studio .Net,并新建一个Visual C#项目,项目名称为【扫描网络计算机】。

  2. 把Visual Studio .Net的当前窗口切换到【Form1.cs(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件,并执行相应操作:

  四个NumericUpDown组件,用以组合成一个IP地址区间。

  一个ListBox组件,用以显示扫描后的结果。

  一个ProgressBar组件,用以显示程序的运行进度。

  四个Label组件,用以显示提示信息。

  一个GroupBox组件。

  一个Button组件,名称为button1,并在这组件拖入窗体后,双击button1,这样Visual Studio .Net就会产生这button1组件Click事件对应的处理代码。

  界面设置如下图:


图01:【扫描网络计算机】项目的设计界面

  3. 把Visual Studio .Net的当前窗口切换到【Form1.cs】,进入Form1.cs文件的编辑界面。在Form1.cs头部,用下列代码替换系统缺省的导入命名空间代码:

using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
using System.Net.Sockets ;
using System.Net ;

  4. 用下列代码替换Form1.cs中的button1的Click时间对应的处理代码,下列代码的功能是扫描给定的IP地址区间,并把扫描结果显示出来。

private void button1_Click ( object sender , System.EventArgs e )
{
 listBox1.Items.Clear ( ) ;
 //清楚扫描结果显示区域
 DateTime StartTime = DateTime.Now ;
 //获取当前时间
 string mask = numericUpDown1.Value.ToString ( ) + "." + numericUpDown2.Value.ToString ( ) +
"." + numericUpDown3.Value.ToString ( ) + "." ;
 int Min = ( int ) numericUpDown4.Value ;
 int Max = ( int ) numericUpDown5.Value ;
 if ( Min > Max )
 {
  MessageBox.Show ( "输入的IP地址区间不合法,请检查!" , "错误!" ) ;
  return ;
 }
 //判断输入的IP地址区间是否合法
 progressBar1.Minimum = Min ;
 progressBar1.Maximum = Max ;
 int i ;
 for ( i = Min ; i <= Max ; i++ )
 {
  string ip= mask + i.ToString ( ) ;
  IPAddress myIP = IPAddress.Parse ( ip ) ;
  //根据给定的IP地址字符串,处境IPAddress实例
  try
  {
   IPHostEntry myHost = Dns.GetHostByAddress ( myIP ) ;
   string HostName = myHost.HostName.ToString ( ) ;
   listBox1.Items.Add ( ip + "名称为:" + HostName ) ;
  }
  catch
  {
   listBox1.Items.Add ( ip + "主机没有响应!" ) ;
  }
  progressBar1.Value = i ;
 }
 //扫描给定IP地址对应的计算机是否在线
 DateTime EndTime = DateTime.Now ;
 TimeSpan ts = EndTime-StartTime ;
 //获得扫描网络计算机所使用的时间
 label4.Text = ts.Seconds.ToString ( ) + "秒" ;
 MessageBox.Show ( "成功完成检测!" , "提示" ) ;
 progressBar1.Value = Min ;
}

  由于上述代码比较简单,并且在代码中的注释也比较详细,这里就不加以解释了,但请注意上面代码中对时间日期类型数据的处理方法。因为有很多人曾经向我讯问过类似问题。

  5. 至此,不基于多线程的【扫描网络计算机】项目的全部工作就完成了,程序的执行是很机械的,其方法是对每一个IP按照顺序进行DNS解析,并得到解析结果,所以程序的执行时间和扫描的IP地址区间段大小成正比。图02是此程序运行后,扫描"10.138.198.1"至"10.138.198.10"这个IP地址区间计算机后的运行界面。整个程序的运行时间为43秒:


图02:不基于多线程的【扫描网络计算机】项目的运行界面
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章