⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frm-onlineip.cs

📁 这是我个人写的一个实例用于登记公司的电脑信息
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Threading;   //线程命名空间 
using System.Net;  //网络命名空间 
//思想为获取IP地址的主机名与信息.如发生异常,则说明主机不可到达(关机) 



namespace 计算机及IP管理
{
    //定义托管
    public delegate void UpdateList(ListViewItem listviewitem); 

    public partial class frm_OnLineIP : Form
    {
        UserCls MyCls = new UserCls();

        ListViewItem listviewitem; //清空listView1的项 

        DateTime StartTime;  //获取当前时间 

        public frm_OnLineIP()
        {
            InitializeComponent();
        }

        //查询按钮,利用线程进扫描网内的IP,注释掉的部分代码用的是单线程,现在用多线程来实现
        private void btnFind_Click(object sender, EventArgs e)
        {
            listView1.Items.Clear();
            txtTime.Text = "0秒";


            if (!MyCls.IsInteger(txtStart.Text) || Convert.ToInt32(txtStart.Text.Trim()) > 255 || Convert.ToInt32(txtStart.Text.Trim()) < 0)
            {
                MessageBox.Show("请输入数字且大于0不大于255", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtStart.Focus();
                return;
            }

            if (!MyCls.IsInteger(txtEnd.Text) || Convert.ToInt32(txtEnd.Text.Trim()) > 255 || Convert.ToInt32(txtEnd.Text.Trim()) < 0)
            {
                MessageBox.Show("请输入数字且大于0不大于255", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtEnd.Focus();
                return;
            }


            /*
            //Thread 类: 创建并控制线程 
            Thread thScan = new Thread(new ThreadStart(ScanTarget));

            //Thread.Start 方法:启动线程 
            thScan.Start(); 
            */
            string strIPaddress = txtNetWork.Text + ".";  //或取前24位的IP地址 
            int Min = Int32.Parse(txtStart.Text);
            int Max = Int32.Parse(txtEnd.Text);

            if (Min > Max)
                MessageBox.Show("终止地止必须大于启始地址", "警告"); //比较开始地址与接束地址,不允许终止地止必须小于启始地址 
            else
            {
                //判断输入的IP地址区间是否合法 
                int _ThreadNum = Max - Min + 1;
                Thread[] mythread = new Thread[_ThreadNum]; //创建一个多个Thread实例 

                progressBarX1.Minimum = Min;
                progressBarX1.Maximum = Max + 1;
                progressBarX1.Value = Min;

                StartTime = DateTime.Now;

                int i;
                for (i = Min; i <= Max; i++)
                {
                    int k = Max - i;
                    PingCls HostPing = new PingCls(); //创建一个PingCls实例 

                    HostPing.ip = strIPaddress + i.ToString();
                    HostPing.ul = new UpdateList(UpdateMyList);//使用委托,调用方法
                    HostPing.listviewitem = listviewitem;

                    //向这个ping实例中传递IP地址字符串 
                    mythread[k] = new Thread(new ThreadStart(HostPing.scan));  //初始化一个线程实例 
                    mythread[k].Start();  //启动线程 
                }
            }
        }


        //页面载入
        private void frm_OnLineIP_Load(object sender, EventArgs e)
        {
            MyCls.GetDataToComboBox("select DISTINCT network from t_switch where network <>''", txtNetWork, "t_switch", "network", "network");
            txtNetWork.Text = "192.168.8";

            //如果没有此句话在调用线程时会发生错误,原因是ScanTarget()函数中用到了WINDOWS控件
            CheckForIllegalCrossThreadCalls = false; 

        }


        //对网内IP扫描
        private void ScanTarget()
        {
            string strIPaddress = txtNetWork.Text + ".";  //或取前24位的IP地址 
            int start = Int32.Parse(txtStart.Text);
            int end = Int32.Parse(txtEnd.Text);
            
            if (start > end)
                MessageBox.Show("终止地止必须大于启始地址", "警告"); //比较开始地址与接束地址,不允许终止地止必须小于启始地址 
            else
            {
                progressBarX1.Minimum = start;
                progressBarX1.Maximum = end+1;

                StartTime = DateTime.Now;

                for (int i = start; i <= end; i++)
                {
                    string strscanip = strIPaddress + i.ToString();//构造IP地址 
                    IPAddress sacanip = IPAddress.Parse(strscanip);//转换成IP地址 

                    listviewitem = new ListViewItem(strscanip, 0);//在ListViewItem添加IP地址 
        
                    try
                    {
                        IPHostEntry hostinfo = Dns.GetHostByAddress(sacanip); //根据ip地址或取主机的DNS信息 

                        string hostname = hostinfo.HostName.ToString(); //或取主机名 

                        listviewitem.SubItems.Add(hostname); //在ListViewItem添加主机名 
                        listviewitem.SubItems.Add("可知");
                        listviewitem.SubItems.Add("可到达");

                    }
                    catch (Exception ew)
                    {
                        listviewitem.SubItems.Add("检测不到");
                        listviewitem.SubItems.Add("未知");
                        listviewitem.SubItems.Add("不可到达");
                        // string strError = string.Format("ERROR:{0}", ew.Message);
                        // MessageBox.Show(strError, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    listView1.Items.Add(listviewitem); //将项加入listView1 
                    progressBarX1.Value = i;
                }
                DateTime EndTime = DateTime.Now;
                TimeSpan Ts = EndTime - StartTime;
                txtTime.Text = Ts.Seconds.ToString() + "秒";

                MessageBox.Show("扫描完毕", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            } 

        }

        //定义 的方法,通过委托来调用。
        void UpdateMyList(ListViewItem listviewitem)
        {
            lock (listView1)
            {
                listView1.Items.Add(listviewitem);
                if (progressBarX1.Value != progressBarX1.Maximum)
                {
                    progressBarX1.Value++;
                }
                if (progressBarX1.Value == progressBarX1.Maximum)
                {
                    MessageBox.Show("成功完成检测!", "提示");
                    DateTime EndTime = DateTime.Now;
                    TimeSpan ts = EndTime - StartTime;
                    txtTime.Text = ts.Seconds.ToString() + "秒";//显示扫描计算机所需要的时间 

                    progressBarX1.Value = progressBarX1.Minimum;
                }
            }
        } 

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -