2009年6月8日月曜日

C# で Ping送信ツール

C# で Ping送信ツールを作ってみよう!

なんてことはないのだが、そんなツールを作ってみた。
参考にさせてもらった(コピペさせてもらった???)のは

DOBON.NET さんの 「Pingを送信する」

同期で作りました
コピペと貼り付け、張り合わせで作ったので動作保障は致しかねます^^;

Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace PingTool
{
    public partial class Form1 : Form
    {

        private PingObject po = new PingObject();
        private bool endflg = true; //起動と同時にtrue。終了したらfalse。閉じてもスリープ処理中であればプロセスが完全に終わらないので。

        public Form1()
        {
            InitializeComponent();
        }

        private void Sleeping(int msec)
        {
            for (int i = 0; i < msec; i++)
            {
                Thread.Sleep(1);
                Application.DoEvents();
                if (endflg == false) { break; }//キャンセルやフォームの終了と共に処理も終了
            }
        }

        private void ping_start_button_Click(object sender, EventArgs e)
        {
            // エラーチェック
            if (IptextBox.Text == "")
            {
                MessageBox.Show("IPを入力して下さい");
                return;
            }
            // 回数初期化
            int retry = 1;//1で初期化
            if (maskedTextBox1.Enabled == true)
            {
                if (int.TryParse(maskedTextBox1.Text, out retry))
                {
                    retry = int.Parse(maskedTextBox1.Text);
                }
                else
                {
                    MessageBox.Show("リトライ回数には数値のみ入力可能です");
                    return;
                }
                // リトライ回数は1回以上
                if (retry < 1)
                {
                    MessageBox.Show("リトライ回数は1回以上です");
                    return;
                }
            }

            // 初期化
            endflg = true;
            toolStripStatusLabel1.Text = "開始";
            ping_start_button.Enabled = false;
            ping_cancel_button.Enabled = true;
            PingtextBox.Text = "";
            po.TimeClear();

            // 実行
            int i = 0;
            while (endflg)
            {
                PingtextBox.AppendText(po.Ping_Start(IptextBox.Text, 3000));
                i += 1;
                // 回数指定
                if (radioButton2.Checked == true && i >= retry)
                {
                    endflg = false;
                }
                else
                {
                    Sleeping(100);
                }
            }
            double t = po.tsum / po.tcount;
            PingtextBox.AppendText("\r\n平均:" + t.ToString() + "\r\n");
            ping_start_button.Enabled = true;
            ping_cancel_button.Enabled = false;
            toolStripStatusLabel1.Text = "完了";
        }

        private void ping_cancel_button_Click(object sender, EventArgs e)
        {
            endflg = false;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            endflg = false;
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            maskedTextBox1.Enabled = false;
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            maskedTextBox1.Enabled = true;
        }
    }
}


PingObject.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.NetworkInformation;
using System.Collections;

namespace PingTool
{
    public class PingObject
    {
        public int tcount = 0;
        public int tsum = 0;

        public void TimeClear()
        {
            tcount = 0;
            tsum = 0;
        }

        // ping処理スタート
        public string Ping_Start(string ip, int timeout)
        {
            //Pingオブジェクトの作成
            Ping p = new Ping();
            //Pingを送信する
            PingReply reply = p.Send(ip, timeout);
            p.Dispose();
            //結果を取得
            if (reply.Status == IPStatus.Success)
            {
                tcount += 1;
                tsum += (int)reply.RoundtripTime;
                return "Reply from " + reply.Address + ":bytes=" + reply.Buffer.Length + " time=" + reply.RoundtripTime + "ms TTL=" + reply.Options.Ttl + "\r\n";
            }
            else
            {
                tcount += 0;
                tsum += 0;
                return "Request " + reply.Status + " \r\n";
            }
        }
    }
}




免責
この記事やプログラムによって生じた事故・損害などは一切保証致しません。ご自身の責任でご使用ください。

子育てブログ「おとう日記」はじめました。
興味ある方、是非ご覧下さい!
おとう日記

コピペプログラマの倉庫を作りました。
サンプルプログラムなど置いておきますのでお立ち寄り下さい。
コピペプログラマ倉庫


良ければ↓投票お願いします↓ m(._.)m ペコッ
人気ブログランキングへ

0 件のコメント:

コメントを投稿