(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;
/
#####
原文地址:https://www.cnblogs.com/buchizaodian/p/8316140.html