PingChecker

PingChecker

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

namespace MyApp.Utility
{
	/// <summary>
	/// Ping送信クラス(同期処理用)
	/// </summary>
	public class PingChecker
	{
		#region コンストラクタ
		/// <summary>
		/// コンストラクタ
		/// </summary>
		public PingChecker()
		{
		}
		#endregion

		#region メソッド

		#region Pingを送信する
		/// <summary>
		/// Pingを送信する
		/// </summary>
		/// <param name="hostNameOrAddress">ホスト名または IP アドレスの文字列形式</param>
		/// <param name="timeOut">タイムアウト(ミリ秒単位)</param>
		/// <param name="repeatCount">リピート回数</param>
		/// <returns>接続を確認した場合true、接続を確認できない場合はfalseを返す</returns>
		public bool Send(string hostNameOrAddress, Int32 timeOut, Int32 repeatCount)
		{
			//パラメータチェック
			if (string.IsNullOrEmpty(hostNameOrAddress))
			{
				throw new ArgumentException("param:[hostNameOrAddress]がnullまたは空文字");
			}

			if (timeOut < 0)
			{
				throw new ArgumentException("param:[timeOut]が0未満");
			}

			if (repeatCount < 0)
			{
				throw new ArgumentException("param:[repeatCount]が0未満");
			}

			//ping実行
			bool result = false;
			using (Ping p = new Ping())
			{
				try
				{
					for (int i = 0; i < repeatCount; i++)
					{
						PingReply reply = p.Send(hostNameOrAddress, timeOut);

						if (reply.Status == System.Net.NetworkInformation.IPStatus.Success)
						{
							result = true;
							break;
						}
					}
				}
				catch (Exception ex)
				{
					//例外は失敗として返す
					System.Diagnostics.Debug.Write(ex.ToString());
				}
			}

			return result;
		}
		#endregion

		#endregion
	}
}