ping超过超时,但报告成功

本文关键字:报告 成功 超时 ping | 更新日期: 2023-09-27 18:26:40

问题:

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

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

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

应该发生什么:

收到ping回复时,如果IPStatus是:

  • 超时(>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

ping超过超时,但报告成功

在所有情况下,您都需要检查PingReply的状态。当为超时指定非常小的数字时,即使超时毫秒已经过去,也可以接收Ping回复。

现在你要问一个难题——500ms、250ms、100ms、10ms,一个很小的数字是什么???很高兴你问。。请参阅这篇文章,不要回答那个问题。https://msdn.microsoft.com/en-us/library/ms144954%28v=vs.110%29.aspx