• (39)C#Ping类


     一、Ping类

    引用命名空间

    using System.Net.NetworkInformation

    控制台版

    using System;
    using System.Collections.Generic;
    using System.Net.NetworkInformation;
    using System.Text;
    using System.Threading;
    namespace ping
    {
        class Program
        {
            static void Main(string[] args)
            {
                //允许应用程序确定远程计算机是否可访问网络的类
                Ping pingSender = new Ping();
                //用于控制如何 Ping 传输数据包
                PingOptions options = new PingOptions();
                //       
                options.DontFragment = true;
                //创建要传输的N字节数据的缓冲区
                 string data=string.Empty;
                 for (int i = 0; i < 5; i++)
                 {
                     //32个字节
                     data += "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
                 }           //
                byte[] buffer = Encoding.ASCII.GetBytes(data);
                //
                int timeout = 120;
                //PingReply提供有关的状态和生成的数据的信息的类
                //
                int a = 1;
                while (a == 1)
                {
                    PingReply reply = pingSender.Send("61.135.169.121", timeout, buffer, options);
                    //
                    if (reply.Status == IPStatus.Success)
                    {
                        Console.WriteLine("答复的主机地址: {0}", reply.Address.ToString());
                        Console.WriteLine("往返时间: {0}ms", reply.RoundtripTime);
                        Console.WriteLine("生存时间(TTL): {0}ms", reply.Options.Ttl);
                        Console.WriteLine("是否控制数据包的分段: {0}", reply.Options.DontFragment);
                        Console.WriteLine("缓冲区大小: {0}", reply.Buffer.Length);
                        Console.WriteLine("    ");
                        //等待1秒
                        Thread.Sleep(1000);
                        
                    }
                    else
                    {
                        Console.WriteLine("    ");
                        Console.WriteLine("请求超时");
                        Console.WriteLine("    ");
                        Thread.Sleep(1000);
                    }
                }
                Console.ReadLine();
            }
        }
    }

     winfrom版

     from1

    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.NetworkInformation;
    using System.Net;
    namespace pingFrom
    {
        public partial class Form1 : Form
        {
            System.Timers.Timer t = new System.Timers.Timer(1000);
            public Form1()
            {
                InitializeComponent();
                //??????????
                System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; 
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                IPAddress ip;
                if (IPAddress.TryParse(textBox1.Text, out ip) == false)
                {
                    MessageBox.Show("非法的IP地址");
                    return;
                } 
                t.Elapsed += new System.Timers.ElapsedEventHandler(changeShifts);
                t.Enabled = true;
                t.AutoReset = true; //每到指定时间Elapsed事件是触发一次(false),还是一直触发(true)              
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                t.Enabled = false;
            }
            //timer
            public void changeShifts(object source, System.Timers.ElapsedEventArgs e)
            {
                 DateTime dtime = DateTime.Now;
                //textBox2.Text += "abc";
                //允许应用程序确定远程计算机是否可访问网络的类
                Ping pingSender = new Ping();
                //用于控制如何 Ping 传输数据包
                PingOptions options = new PingOptions();
                // 
                options.DontFragment = true;
                int timeout = 120;
                //创建要传输的N字节数据的缓冲区
                string data = string.Empty;
                for (int i = 0; i < 5; i++)
                {
                    //32个字节
                    data += "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
                }
                byte[] buffer = Encoding.ASCII.GetBytes(data);
                //
                //PingReply提供有关的状态和生成的数据的信息的类
                PingReply reply = pingSender.Send(textBox1.Text, timeout, buffer, options);
                //
                if (reply.Status == IPStatus.Success)
                {
                    string str = "目标地址" + textBox1.Text + ",往返时间" + reply.RoundtripTime + "ms ,生存时间(TTL)" + reply.Options.Ttl + "ms, 发送数据大小" + reply.Buffer.Length + "字节";
                    textBox2.AppendText(str);
                    textBox2.AppendText("
    ");
                    textBox2.AppendText("
    ");
                    oracleDB.sqlSuccess("mengpc", textBox1.Text, Convert.ToString(reply.RoundtripTime), Convert.ToString(reply.Options.Ttl), Convert.ToString(reply.Buffer.Length), dtime);
    
                }
                else
                {
                    textBox2.AppendText("请求超时");
                    textBox2.AppendText("
    ");
                    textBox2.AppendText("
    ");
                    string remark = "请求超时";
                    oracleDB.sqlFail("mengpc", textBox1.Text, dtime, remark);
                }
                this.textBox2.SelectionStart = this.textBox2.Text.Length;
                this.textBox2.SelectionLength = 0;
                this.textBox2.ScrollToCaret();
                
                
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                textBox2.Text = "";
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                Form2 frm = new Form2();
                frm.ShowDialog();
            } 
        }
    }

     from2

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data;
    
    namespace pingFrom
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                DateTime dtime1 = Convert.ToDateTime(dateTimePicker1.Text);
                DateTime dtime2 = Convert.ToDateTime(dateTimePicker2.Text);
                if (dtime1.CompareTo(dtime2) == 1)
                {
                    MessageBox.Show("开始节点要小于结束节点");
                }
                DataTable dt = oracleDB.query(dtime1, dtime2).Tables[0];
                int num = dt.Rows.Count;
                System.TimeSpan t3 = dtime2 - dtime1;
                double getMillisecond = t3.TotalMilliseconds;
                label3.Text = "厉时" + getMillisecond + "秒,一共" + num + "条数据";
                int count = 0;
                int ttl = 0;
                foreach (DataRow dr in dt.Rows)
                {
    
                    if (Convert.ToString(dr["REMARKS"]) == "请求超时")
                    {
                        count += 1;
                    }
                    string a = Convert.ToString(dr["ROUNDTRIPTIME"]);
                    if (Convert.ToInt32(dr["ROUNDTRIPTIME"]) > 100)
                    {
                        ttl += 1;
                    }
                }
                label4.Text = "请求超时的数据共有 " + count + "";
                label5.Text = "ping值大于100的共有 " + ttl + "";
            }
        }
    }

    oracleDB.cs

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data.OleDb;
    using System.Data;
    
    namespace pingFrom
    {
        class oracleDB
        {
            /// <summary>
            /// PING通
            /// </summary>
            /// <param name="loclaName"></param>
            /// <param name="targetIp"></param>
            /// <param name="roundtripTime"></param>
            /// <param name="ttl"></param>
            /// <param name="bufferSize"></param>
            /// <param name="dtime"></param>
            public static void sqlSuccess(string loclaName, string targetIp, string roundtripTime,string ttl,string bufferSize,DateTime dtime)
            {
                string str = "Provider=OraOLEDB.Oracle.1;User ID=MES;Password=zidonghua;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";
                //测试用sql: insert into PINGTABLE (LOCALNAME,TARGETIP,ROUNDTRIPTIME,TTLTIME,BUFFERSIZE,PINGTIME,INSERTTIME) VALUES('mengpc','192.166.208.60','8ms','50ms','320byte',sysdate,to_date('2017-2-1 23:59:59','yyyy-mm-dd hh24-mi-ss'))
                string sql = string.Format(@"insert into PINGTABLE (LOCALNAME,TARGETIP,ROUNDTRIPTIME,TTLTIME,BUFFERSIZE,PINGTIME,INSERTTIME) 
                                             VALUES('{0}','{1}','{2}','{3}','{4}',to_date('{5}','yyyy-mm-dd hh24-mi-ss'),sysdate)", loclaName, targetIp, roundtripTime, ttl, bufferSize, dtime);
                using (OleDbConnection conn = new OleDbConnection(str))
                {
                    conn.Open();
                    OleDbCommand command = new OleDbCommand(sql, conn);
                    command.ExecuteNonQuery();
                }
    
            }
            /// <summary>
            /// 网络不通
            /// </summary>
            /// <param name="loclaName"></param>
            /// <param name="targetIp"></param>
            /// <param name="dtime"></param>
            /// <param name="remark"></param>
            public static void sqlFail(string loclaName, string targetIp, DateTime dtime,string remark)
            {
                string str = "Provider=OraOLEDB.Oracle.1;User ID=MES;Password=zidonghua;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";
                string sql = string.Format(@"insert into PINGTABLE (LOCALNAME,TARGETIP,ROUNDTRIPTIME,PINGTIME,INSERTTIME,REMARKS) 
                                             VALUES('{0}','{1}',0,to_date('{2}','yyyy-mm-dd hh24-mi-ss'),sysdate,'{3}')", loclaName, targetIp, dtime, remark);
                using (OleDbConnection conn = new OleDbConnection(str))
                {
                    conn.Open();
                    OleDbCommand command = new OleDbCommand(sql, conn);
                    command.ExecuteNonQuery();
                }
    
            }
            
            public static DataSet query(DateTime dtime1, DateTime dtime2) 
            {
                 
                string str = "Provider=OraOLEDB.Oracle.1;User ID=MES;Password=zidonghua;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";
                string sql = string.Format("select * from PINGTABLE where PINGTIME>= to_date('{0}','yyyy-mm-dd hh24-mi-ss') and PINGTIME< to_date('{1}','yyyy-mm-dd hh24-mi-ss')", dtime1, dtime2);
                using (OleDbConnection conn = new OleDbConnection(str))
                {
                    conn.Open();
                    OleDbCommand command = new OleDbCommand(sql, conn);
                    OleDbDataAdapter adapter = new OleDbDataAdapter(command);
                    DataSet ds = new DataSet();
                    adapter.Fill(ds);
                    return ds;
                }
            }
            
        }
    }

    建表

    #创建用户命令
    create user MES identified by zidonghua
    #授予dba权限
    grant connect,resource,dba to MES;
    #创建表
    create table pingTable(id int,localName varchar2(80),targetIP varchar2(50),roundtripTime varchar2(50),ttlTime varchar2(50),bufferSize varchar2(50),pingTime date,insertTime date,remarks varchar2(200));
    #
    
    
    COMMENT ON COLUMN pingTable.localName IS '本地主机名'
    /
    COMMENT ON COLUMN pingTable.targetIP IS '目标IP地址'
    /
    COMMENT ON COLUMN pingTable.roundtripTime IS '返回时间'
    /
    COMMENT ON COLUMN pingTable.ttlTime IS '生存时间'
    /
    COMMENT ON COLUMN pingTable.bufferSize IS '数据大小'
    /
    COMMENT ON COLUMN pingTable.pingTime IS 'ping的当时时间'
    /
    COMMENT ON COLUMN pingTable.insertTime IS '插入数据库时间'
    /
    COMMENT ON COLUMN pingTable.remarks IS '备注'
    /
    ####### 序列,触发器
    CREATE SEQUENCE SEQ_pingTable
        START WITH 1
        INCREMENT BY 1
        NOMINVALUE
        NOMAXVALUE
       CACHE 20
       NOORDER;
    
    -- 
    -- TRIGGER: TR_BD_APPLY_MATERIAL 
    --
    
    create or  replace trigger TR_pingTable
    
    before insert on pingTable
    
    for each row
    
    begin
    
    select SEQ_pingTable.nextval into :new.ID from dual;
    
    end;
    /
    #####
  • 相关阅读:
    linux下创建和删除软、硬链接
    linux教程:[4]配置Tomcat开机启动
    Linux下Tomcat的启动、关闭、杀死进程
    Linux下Tomcat的安装配置
    Linux安装JDK详细步骤
    每天一个linux命令(30): chown命令
    linux系统修改系统时间与时区
    linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
    linux下解压命令大全
    Scoped CSS规范草案
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/8316140.html
Copyright © 2020-2023  润新知