在我的C#应用程序中进行“ping”操作

14

我需要让我的应用程序ping一个我稍后指定的地址,并将平均ping时间简单地复制到标签的.Text中。

有人能提供帮助吗?

编辑:

如果有人感兴趣,我已经找到了解决方案:

Ping pingClass = new Ping();        
PingReply pingReply = pingClass.Send("logon.chronic-domination.com");
label4.Text = (pingReply.RoundtripTime.ToString() + "ms");

4
请添加您的答案和相应 MSDN 文档的链接作为正确答案,而不是更新问题。这样可以让您获得声望,并保持 QA 格式的一致性。相关的 MSDN 链接:http://msdn.microsoft.com/en-us/library/system.net.networkinformation.pingreply.aspx翻译:请以正式答案的形式添加您的回答和相关 MSDN 文档的链接,而不是更新问题。这样可以让您获得声望,并保持QA格式的一致性。相关的 MSDN 链接:http://msdn.microsoft.com/en-us/library/system.net.networkinformation.pingreply.aspx - Eric Schoonover
2个回答

35

请看NetworkInformation.Ping类。

以下是一个例子:

用法:

PingTimeAverage("stackoverflow.com", 4);

实现:

public static double PingTimeAverage(string host, int echoNum)
{
    long totalTime = 0;
    int timeout = 120;
    Ping pingSender = new Ping ();

    for (int i = 0; i < echoNum; i++)
    { 
        PingReply reply = pingSender.Send (host, timeout);
        if (reply.Status == IPStatus.Success)
        {
            totalTime += reply.RoundtripTime;
        }
    }
    return totalTime / echoNum;
}

PingTimeAverage("i.dont.exist.com", 1000) == 0 - Anton Tykhyy
2
@Anton,如果主机无法解析,则Ping.Send方法将引发PingException... http://is.gd/2hLjo - Christian C. Salvadó
@CMS 我尝试复制了一个小的Ping()测试,使用“hostname.com”无法工作,无论是stackoverflow.com/google.com还是其他任何网站。唯一能够正常工作的是使用实际IP地址。Ping的MSDN说可以使用主机名,但实际上并不行。 - JWiley

0

顺便提一下,已经有一个在sourceforge上的项目正在做你想要的事情。这个项目还包括了ICMP(RFC 792)的实现。

Sourceforge项目


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接