2015-12-12 19 views
0

問題:C# - 平超過超時,但報告成功

在我的代碼

,我正確地設置一個ping的超時時間爲100ms

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

其中ping和正確回答,但IPStatus。 TimeExceeded是 「錯誤的」,並報告成功後RTT是> 100ms的

應該發生什麼:

recieving一個pingreply時,如果IPStatus是:

  • TimeExceeded(> 100毫秒),_devicePing應該有一個顏色設置爲紅色

  • 成功(< = 100毫秒),_devicePing應該有一個顏色設置爲綠色

  • 任何其他適當的顏色設置。

會發生什麼:

任何ping回覆這是一個回覆報告成功即使有RTT> 100ms的

類設備

{ 
    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 

回答

0

您需要在所有情況下檢查PingReply的狀態。 When specifying very small numbers for timeout, the Ping reply can be received even if timeout milliseconds have elapsed.

現在你問這個難題 - 什麼是一個非常小的數字500ms,250ms,100ms 10ms,?很高興你問..看到這篇文章沒有答覆這個問題。 https://msdn.microsoft.com/en-us/library/ms144954%28v=vs.110%29.aspx

+0

我知道這件事,但這是如何解決我的問題?或者說,我應該做我自己的TimeElapsed檢查,因爲這是它歸結爲什麼? – KGCybeX

+0

@KGCybeX - 您需要執行自己的時間檢查。您可以檢查pingreply是否>超時=失敗。我不知道有什麼辦法可以讓.NET庫的行爲與它的行爲不同 - 所以你需要解決它或者自己動手。解決方法更容易。 – Ken