簡體   English   中英

檢查遠程計算機是否脫機的最快方法

[英]The fastest way to check whether remote computer is offline

我需要一種最快的方法來檢查遠程計算機是否關閉 我嘗試了一些方法,但是沒有一種方法可以給我所需的時間速度(應該少於0.5秒,這很關鍵,因為在上下文菜單彈出窗口中會發生)

            //using System.Net
            IPHostEntry ipHostInfo = Dns.GetHostEntry(hostName);
            //if error occurs - remote computer is off

            //using System.Net.NetworkInformation
            Ping ping = new Ping();
            PingReply pingReply = ping.Send(hostIp);
            if (pingReply.Status != IPStatus.Success)
            {
                //Remote computer is off
            }

            //using System.Management
            ManagementScope scope = new ManagementScope(@"\\" + hostName + @"\root\cimv2", null);
            scope.Connect();
            //if error occurs - remote computer is off

據我所知,最快的方法是使用Dns.GetHostEntry(hostName)-但仍然需要3秒鍾才能引發異常。 任何想法?

Ping與超時一起使用。 此版本的Send方法將允許您指定等待響應的時間。 如果您定義500毫秒,並且您要檢查的服務器不在地球的另一端,或者不在非常高的延遲Internet連接上,則可以很可靠地說出目標計算機已關閉或Internet連接有問題。

Dns.GetHostEntry不會檢查主機是打開還是關閉。 這適用於DNS,並且僅嘗試解析主機名。 即使主機名存在並且僅使用的DNS服務器沒有響應,DNS仍可能很慢並且可能會超時。

鑒於事實是它僅用於一台計算機,您為什么不讓答案的邏輯運行在單獨的線程上並緩存計算機的狀態? 您的上下文彈出窗口將從該緩存中讀取並“立即”做出反應,但是確切的狀態可能會延遲幾秒鍾...現在,這取決於您隨后對計算機的處理方式(您未在答案中提及),這可能是考慮的方法...

因為您受多種因素(網絡負載,數據包丟失等)的影響,此外,當計算機收到請求后沒有立即做出響應時,不一定表示它處於聯機狀態,因此不能認為計算機處於聯機狀態。離線。 我認為您可以比ping請求快得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM