2010-11-04 27 views
3

Je veux savoir comment je peux vérifier si le domaine est un live dans C#?C# vérifier domaine est en direct

J'ai fait ce

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

renvoie l'adresse IP (s), ce qui est bon, mais je veux vérifier si elle est en direct (comme le ping)? J'ai juste besoin de savoir si le PC est dans le même réseau que le serveur, donc j'ai une fonction à vérifier, mais les fonctions basées sur le code ci-dessus, et il retourne IPs mais j'ai remarqué qu'il est basé sur le cache DNS!

Je souhaite ajouter une autre fonction de vérification pour voir si le serveur est en ligne!

acclamations

+2

Qu'est-ce que "live" pour vous? Que vous pouvez le cingler? C'est a un serveur web qui fonctionne? –

+1

que voulez-vous dire par «vivre»? –

+0

que le serveur est opérationnel, tout simplement le programme va vérifier le domaine et voir si elle est en place, puis (je l'ai fait), il va vérifier l'adresse IP correspond à l'original, c'est simplement un mécanisme de vérification interne application qu'il va préformer une tâche que si la machine est connectée à notre réseau au travail –

Répondre

6

La propriété System.Net.NetworkInformation.OperationalStatus vous permet de détecter si votre interface réseau est connectée (en haut).

La méthode NetworkInterface.GetIPProperties vous donnera les informations IP.

Vous pouvez l'utiliser pour vérifier si l'ordinateur est en réseau local, puis faire ce dont vous avez besoin, par exemple un ping, s'il est connecté.

+0

Merci Cela semble très bonne façon de commencer, je vais le tester jeudi, quand je serai au travail :-) –

+0

Lovely, a parfaitement fonctionné, merci :-) –

4

Vous pouvez utiliser la méthode Ping.Send(IPAddress).

Éditer: Ou l'une des surcharges qui prend directement le nom d'hôte. Ping.Send(string)

Exemple de MSDN:

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

Salut, Merci, mais l'autre ne fonctionne pas pour moi! cela ne montre rien –

+0

@ Data-Base, avec l'exemple exact et le nom d'hôte ci-dessus, je reçois 'TimedOut' sur ma console. Que se passe-t-il si vous mettez un point d'arrêt dans l'autre partie? –

+0

drôle, maintenant il a travaillé avec l'exemple ci-dessus ("www.contoso.com ") mais quand j'utilise notre domaine, il ne fonctionne que lorsque mon PC est connecté au réseau, quand je déconnecte le câble, il ne sjow pas le temps d'attente!! –

0

Si vous devez effectuer toutes sortes de tâches avec un système distant, aucune quantité de pré-vérification veillera à ce que vous êtes en mesure de mener à bien la tâche - les réseaux et les hôtes ne sont pas fiables à 100% et vrai lors de vos opérations de vérification peut ne plus être vrai lors de la tentative de la tâche réelle, ou pendant toute la durée de l'exécution de la tâche.

La seule chose sensée à faire est de tenter la tâche que vous devez effectuer, et de traiter les erreurs, les délais d'attente, etc, d'une manière sûre. Cela peut être informer l'utilisateur de l'échec ou le réessayer (éventuellement avec des délais croissants entre chaque tentative), ou simplement consigner l'erreur quelque part.

+0

Merci, je dois juste savoir si un hôte est en direct! et si c'est le cas, le programme fonctionnera (c'est une application pour notre usage interne à travail), acclamations –