2010-11-04 67 views
3

我想知道如何檢查域是否在c#中?c#檢查域是否存在

我做了這個

IPAddress[] addresslist = Dns.GetHostAddresses("domain"); 

它返回的IP(S),這是很好的,但我想檢查它是否是活的(如ping)?

我只需要知道PC是否與服務器在同一網絡中,所以我有一個功能來檢查基於上述代碼的功能,並返回IP,但我注意到它基於緩存DNS!

我想添加另一個檢查功能,看看服務器是否在線!

歡呼

+2

什麼是「活」給你?你可以ping通它?那是一個正在運行的網絡服務器? – 2010-11-04 07:39:16

+1

'live'是什麼意思? – 2010-11-04 07:39:27

+0

服務器啓動並運行,只需程序將檢查域並查看它是否啓動,然後(我已完成)它將檢查IP地址與原始匹配,只是它是一個內部檢查機制應用程序,它只會在機器連接到我們的網絡時纔會執行一些任務 – 2010-11-04 08:06:42

回答

6

System.Net.NetworkInformation.OperationalStatus屬性允許您檢測網絡接口是否連接(up)。

NetworkInterface.GetIPProperties方法會給你的IP信息。

您可以使用它來檢查計算機是否在局域網上,然後執行您所需的操作 - 如果連接了ping,

+0

謝謝這聽起來很好的方式開始,我會在星期四測試它,當我在工作時:-) – 2010-11-16 17:47:13

+0

可愛,工作完美,謝謝:-) – 2010-11-18 14:25:15

4

可以使用Ping.Send(IPAddress)方法。

編輯:或直接採用主機名的重載之一。從MSDN Ping.Send(string)

例子:

Ping pingSender = new Ping(); 
PingReply reply = pingSender.Send ("www.contoso.com"); 
if (reply.Status == IPStatus.Success) 
{ 
    Console.WriteLine ("Address: {0}", reply.Address.ToString()); 
    Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime); 
    Console.WriteLine ("Time to live: {0}", reply.Options.Ttl); 
    Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment); 
    Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length); 
} 
else 
{ 
    Console.WriteLine (reply.Status); 
} 
+0

嗨,謝謝,但其他人不適合我!它只顯示任何東西 – 2010-11-04 07:57:56

+0

@數據庫,以上面的確切示例和主機名爲例,我在控制檯上獲得了'TimedOut'。如果你在其他部分放置一個斷點會發生什麼? – 2010-11-04 09:08:37

+0

有趣,現在它與上面的例子一起工作(「www.contoso。com「),但是當我使用我們的域時,它只在我的PC連接到網絡時才起作用,當我斷開電纜時,它不會超時!!! – 2010-11-04 09:26:31

0

如果需要與遠程系統執行任何種類的任務,那麼沒有預檢量將確保你能夠執行任務 - 網絡和主機不是100%可靠的,並且在檢查操作期間的真實情況在嘗試實際任務時或在整個執行任務期間可能不再是真實的。

唯一可行的做法是嘗試執行需要執行的任務,並以安全的方式處理錯誤,超時等。這可能會讓用戶知道失敗或重試失敗(可能每次嘗試之間的延遲都會增加),或者只是在某處記錄錯誤。

+0

謝謝,我只需要知道,如果一些主機是活的!如果它是那麼該程序將工作(這是一個應用程序供我們在內部使用工作),歡呼聲 – 2010-11-04 07:59:03