2008-12-07 11 views
5

Was ist der einfachste Weg, um zu überprüfen, ob ein Computer lebt und reagiert (sagen wir in Ping/NetBios)? Ich möchte eine deterministische Methode, die ich zeitlich begrenzen kann.Wie überprüft man, ob ein Computer von C#

Eine Lösung ist der einfache Zugriff auf die Freigabe (File.GetDirectories (@ "\ compname")) in einem separaten Thread und den Thread töten, wenn es zu lange dauert.

+0

Mit welchem ​​Anschluss müssen Sie sich verbinden? Angesichts von Firewalls - netzwerkweit und pro System - könnte ein System leicht verfügbar sein, scheint aber nicht zu reagieren, wenn Sie den falschen Port zum Testen auswählen. – tvanfosson

+0

BTW, möchte ich nur sagen, dass, wenn ein Netzwerk beteiligt ist, keine "deterministische" Methode definitionsgemäß existieren kann. http://en.wikipedia.org/wiki/Deterministischer_Algorithmus – paxos1977

Antwort

10

Einfach! Verwenden Sie System.Net.NetworkInformation Namespace Ping-Funktion!

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

+3

Aus Sicherheitsgründen ist PING einer der Dienste, die an unserer Netzwerkgrenze blockiert sind - zusammen mit einer Vielzahl anderer Ports. Wenn verfügbar, ist dies ein guter Mechanismus, aber Sie müssen wissen, ob es zuerst funktioniert und dass es in Zukunft nicht ausgeschaltet wird. – tvanfosson

+1

In der Tat kann dies bei jedem Dienst passieren. Wenn Sie daher einen zuverlässigen Weg suchen, um einen Dienst auf einem Remote-Computer zu erreichen, sollten Sie in Betracht ziehen, das Protokoll auf einem höheren Protokoll zu überprüfen (dem Protokoll, auf das Sie sich gerade verlassen). –

+0

@Mehrdad - Einverstanden. – tvanfosson

3

ein bestimmt TCP-Port (myPort) auf einem bekannten Server zu überprüfen, die folgenden Schnipsel verwenden. Sie können die Ausnahme System.Net.Sockets.SocketException abfangen, um einen nicht verfügbaren Port anzugeben.

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); 

Weitere, spezialisierte, Prüfungen können IO mit Timeouts auf dem Sockel versuchen.

1

Solange Sie einen Computer innerhalb des eigenen Subnetzes überprüfen möchten, können Sie ihn mit ARP überprüfen. Hier ein Beispiel:

Weitere Informationen finden Sie unter Pinvoke.net.