2008-12-07 8 views
5

से प्रतिक्रिया दे रहा है या नहीं, यह जांचने का सबसे आसान तरीका क्या है कि कोई कंप्यूटर जीवित है और प्रतिक्रिया दे रहा है (पिंग/नेटबीओस में कहें)? मुझे एक निर्धारिक विधि चाहिए जो मैं समय सीमा तक कर सकता हूं।यह जांचने के लिए कि कोई कंप्यूटर C#

एक समाधान एक अलग थ्रेड में फ़ाइल (फ़ाइल.गेट डायरेक्टरीज़ (@ "\ compname")) तक आसान पहुंच है, और थ्रेड को बहुत लंबा लगता है।

+0

आपको किस पोर्ट से कनेक्ट करने की आवश्यकता है? दिए गए फ़ायरवॉल - नेटवर्क-व्यापी और प्रति-प्रणाली - एक प्रणाली आसानी से उपलब्ध हो सकती है लेकिन अगर आप कोशिश करने के लिए गलत बंदरगाह चुनते हैं तो प्रतिक्रिया नहीं दे रहे हैं। – tvanfosson

+0

बीटीडब्ल्यू, मैं बस इतना कहना चाहूंगा कि जब कोई नेटवर्क शामिल होता है, तो परिभाषा के अनुसार कोई "निर्धारणात्मक" विधि मौजूद नहीं हो सकती है। http://en.wikipedia.org/wiki/Deterministic_algorithm – paxos1977

उत्तर

10

आसान! System.Net.NetworkInformation नेमस्पेस की पिंग सुविधा का उपयोग करें!

http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx

+3

सुरक्षा कारण के लिए PING हमारी सेवाओं की सीमा पर अवरुद्ध सेवाओं में से एक है - कई अन्य बंदरगाहों के साथ। यदि उपलब्ध हो तो यह एक अच्छा तंत्र है, लेकिन आपको यह जानना होगा कि क्या यह पहले काम करने जा रहा था और यह भविष्य में बंद नहीं होगा। – tvanfosson

+1

वास्तव में, यह किसी भी सेवा के साथ हो सकता है। इसलिए, यदि आपको किसी दूरस्थ कंप्यूटर पर किसी सेवा तक पहुंचने के लिए विश्वसनीय तरीका की आवश्यकता है, तो आपको शायद इसे उच्च स्तर के प्रोटोकॉल (प्रोटोकॉल पर विशेष रूप से भरोसा कर रहे हैं) पर जांचना चाहिए। –

+0

@ मेहरदाद - सहमत। – tvanfosson

3

एक ज्ञात सर्वर पर एक विशिष्ट TCP पोर्ट (myPort) की जाँच करने के लिए निम्न का उपयोग करते हैं। गैर उपलब्ध बंदरगाह को इंगित करने के लिए आप System.Net.Sockets.SocketException अपवाद को पकड़ सकते हैं।

using System.Net; 
using System.Net.Sockets; 
... 

IPHostEntry myHostEntry = Dns.GetHostByName("myserver"); 
IPEndPoint host = new IPEndPoint(myHostEntry.AddressList[0], myPort); 

Socket s = new Socket(AddressFamily.InterNetwork, 
    SocketType.Stream, ProtocolType.Tcp); 
s.Connect(host); 

आगे, विशेष, चेक सॉकेट पर टाइमआउट के साथ आईओ को आजमा सकते हैं।

1

जब तक आप अपने सबनेट में कंप्यूटर की जांच करना चाहते हैं तो आप इसे ARP का उपयोग करके देख सकते हैं। यहां एक उदाहरण दिया गया है:

//for sending an arp request (see pinvoke.net) 
    [DllImport("iphlpapi.dll", ExactSpelling = true)] 
    public static extern int SendARP(
             int DestIP, 
             int SrcIP, 
             byte[] pMacAddr, 
             ref uint PhyAddrLen); 


    public bool IsComputerAlive(IPAddress host) 
    { 
     //can't check the own machine (assume it's alive) 
     if (host.Equals(IPAddress.Loopback)) 
      return true; 

     //Prepare the magic 

     //this is only needed to pass a valid parameter 
     byte[] macAddr = new byte[6]; 
     uint macAddrLen = (uint)macAddr.Length; 

     //Let's check if it is alive by sending an arp request 
     if (SendARP((int)host.Address, 0, macAddr, ref macAddrLen) == 0) 
      return true; //Igor it's alive! 

     return false;//Not alive 
    } 

अधिक जानकारी के लिए Pinvoke.net देखें।