0

補足: これにぴったりのタイトルが思いつきませんでした。

わかりました、コードの再利用を信じていない開発者によってまとめられたプログラムの更新に取り組んでいます。SO私は、将来の変更のために更新して「フレンドリー」にする仕事を任されています。

編集私は言ったはずです:エンドユーザーは、コマンドプロンプトで各pingを確認したいと考えています。組み込みのpingを使用する方が良いオプションであることは知っていますが、それが彼らが望んでいることです... /End Edit

私は、プログラム全体で数回実装されているクラスを使用しています。(以前は、基本的に同じことを行う 2 つのクラスがありました)

インターフェイスを作成してクラスに実装することにしました。

(私はもうあなたを失ったの?)

このメソッドは実際には、ホスト名 (メソッド パラメーターの 1 つ) を ipaddress に変換し、コマンド プロンプトを生成して ping を実行するだけです。また、インターフェイスを実装してメソッドを呼び出す SEPARATE クラスもありますが、文字列 (ホスト名) を渡すのではなく、ipaddress オブジェクトを渡します。

私の質問はここにあります:型を変更できるパラメーターを扱うときのベストプラクティスは何ですか? 誰かが私がしたことを調べますか?それはうまく準拠しています。それがベストプラクティスであることを確認したいだけです。

// Interface that is implement twice in the program 
interface Icmd_Ping
    {
    void initilize_Proc(object target, string last_Octet);

    }


 class process_spawn : Icmd_Ping
{     
    writeLog_Delegate writeLog = new writeLog_Delegate(error_Log.write_log);

    private string ipaddress;
    public object Ipaddress
        {
        get { return ipaddress; }
        set
            {                
            IPAddress ip = value as IPAddress;
            if (ip != null)
                ipaddress = ip.ToString();
            else
                {

                try
                    {
                    formatIP format = new formatIP();
                    ipaddress = format.convert_Ip(((string)value));
                    }
                catch (Exception ex)
                    {
                    writeLog(ex);
                    }
                }   
            }
        }

    public void initilize_Proc(object target, string last_Octet = null)
        {
        if (target == null)
            throw new ArgumentNullException();

        formatIP format_IP = new formatIP();
        this.Ipaddress = target;

        Process cmd = new Process();
        ProcessStartInfo psi = new ProcessStartInfo {FileName = "cmd", UseShellExecute = false, RedirectStandardOutput = false };
        cmd.StartInfo = psi;

        if (last_Octet != string.Empty)
            psi.Arguments = string.Format("/c ping {0} -t", format_IP.format_Ip(((string)Ipaddress), last_Octet));
        if (last_Octet == string.Empty)
            psi.Arguments = string.Format("/c ping {0} -t", ((string)Ipaddress));


        cmd.Start();
        }



}

ipaddress プロパティの IP アドレスを変換する必要がありますか? それとも、新しいメソッドを作成してそれを呼び出すだけですか?

申し訳ありませんが、この時点ではあまりエレガントではないことはわかっています。実際にこれに飛び込む前に、書き込み方向にいることを確認したいだけです。

助けてくれてありがとう。

4

2 に答える 2

1

System.Net.IPAddressまず、自分でロールバックする代わりに 使用することをお勧めします。http://msdn.microsoft.com/en-us/library/system.net.ipaddress.aspx

System.Net.NetworkInformation.Ping次に、 ICMP-Echo http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspxを実行するために使用できます。

例えば

        IPAddress ip = IPAddress.Parse("192.168.0.1");
        Ping ping = new Ping();

        for (int i = 0; i < 4; ++i)
        {
            var reply = ping.Send(ip);
            Console.WriteLine("Reply from {0} Status: {1} time:{2}ms", 
                              reply.Address, 
                              reply.Status, 
                              reply.RoundtripTime);
        }
于 2012-04-17T22:02:23.697 に答える
0

.NET 関数 Dns.GetHostAddresses() を使用して、DNS エントリを個々のホスト アドレスに解決できます (これも要件の 1 つだったと思います)。

foreach (IPAddress address in Dns.GetHostAddresses(hostName))
{
   PingReply reply = Ping.Send(address);
   ...
}

そこから、ping ツールに似た形式に返信をフォーマットします。TTL および送信バイト数については、.NET の Ping.Send() API を介してパラメーターを制御することもできます。

于 2012-04-17T22:26:58.157 に答える