c# - ping超过超时但报告成功

时间:2015-12-12 10:11:30

标签: c# networking network-programming ping

问题:

在我的代码中,我将ping的超时设置为100ms

new Ping().Send(item._deviceIP, 100, new byte[1])

正确ping并正确回复,但IPStatus.TimeExceeded是"错误"并且在RTT之后报告成功> 100ms的

会发生什么:

当收到pingreply时,如果IPStatus是:

  • TimeExceeded(> 100ms),_ devicePing的颜色设置为红色

  • 成功(< = 100ms),_ devicePing的颜色应设为绿色

  • 设置任何其他适当的颜色。

会发生什么:

即使RTT> 100ms

,任何ping回复都是回复报告成功

类设备

{
    public IPAddress _deviceIP;
    public string _deviceMAC;
    public string _deviceName;
    public PingReply _devicePing ;
    public Color _deviceStatus = Color.White;
    public int _timeout_Count = 0;

    public Color deviceStatus
        {
            get { return _deviceStatus; }
            set { _deviceStatus = value; }
        }

主程序代码

List<device> _alive = new List<device>();
foreach (device item in _clients)
{
    PingReply _client_reply = new Ping().Send(item._deviceIP, 100, new byte[1]);
    item._devicePing = _client_reply; (item object accepts a PingReply)
    IPStatus _client_status = _client_reply.Status;
    switch (_client_status)
    {
        case IPStatus.TimeExceeded:
        {
            item.deviceStatus = Color.Red;
        }        
        break;

    //rest of code

1 个答案:

答案 0 :(得分:0)

在所有情况下,您都需要检查PingReply的状态。 When specifying very small numbers for timeout, the Ping reply can be received even if timeout milliseconds have elapsed.

现在你问一个棘手的问题 - 什么是一个非常小的数字500毫秒,250毫秒,100毫秒10毫秒,???很高兴你问过..看到这篇文章没有回答那个问题。 https://msdn.microsoft.com/en-us/library/ms144954%28v=vs.110%29.aspx