web-dev-qa-db-fra.com

Utilisation de ping en c #

Lorsque je cingle un système distant avec Windows, il dit qu'il n'y a pas de réponse, mais lorsque je cingle avec c #, il dit succès. Windows est correct, le périphérique n'est pas connecté. Pourquoi mon code est-il capable de faire un ping avec succès lorsque Windows ne l'est pas?

Voici mon code:

Ping p1 = new Ping();
PingReply PR = p1.Send("192.168.2.18");
// check when the ping is not success
while (!PR.Status.ToString().Equals("Success"))
{
    Console.WriteLine(PR.Status.ToString());
    PR = p1.Send("192.168.2.18");
}
// check after the ping is n success
while (PR.Status.ToString().Equals("Success"))
{
    Console.WriteLine(PR.Status.ToString());
    PR = p1.Send("192.168.2.18");
}
80
Black Star
using System.Net.NetworkInformation;    

public static bool PingHost(string nameOrAddress)
{
    bool pingable = false;
    Ping pinger = null;

    try
    {
        pinger = new Ping();
        PingReply reply = pinger.Send(nameOrAddress);
        pingable = reply.Status == IPStatus.Success;
    }
    catch (PingException)
    {
        // Discard PingExceptions and return false;
    }
    finally
    {
        if (pinger != null)
        {
            pinger.Dispose();
        }
    }

    return pingable;
}
195
JamieSee

L'utilisation de ping en C # s'effectue à l'aide de la méthode Ping.Send(System.Net.IPAddress), qui exécute une demande de ping vers l'adresse IP ou l'URL valide fournie et obtient une réponse en retour appelée ICMP). Paquet qui contient un en-tête de 20 octets contenant les données de réponse du serveur ayant reçu la demande de ping. Le framework .Net System.Net.NetworkInformation nompace contient une classe appelée PingReply classe dont les propriétés sont conçues traduire la réponse ICMP et fournir des informations utiles sur la mise en réseau du serveur sur lequel un ping est envoyé, telles que:

  • IPStatus : obtient l'adresse de l'hôte qui envoie la réponse d'écho ICMP (Internet Control Message Protocol).
  • IPAddress : récupère le nombre de millisecondes nécessaires pour envoyer une demande d'écho ICMP (Internet Control Message Protocol) et recevoir le message de réponse d'écho ICMP correspondant.
  • RoundtripTime (System.Int64) : Obtient les options utilisées pour transmettre la réponse à un message de contrôle Internet. Demande d'écho de protocole (ICMP).
  • PingOptions (System.Byte []) : Obtient la mémoire tampon des données reçues dans un message de contrôle Internet. Protocole (ICMP) echo message de réponse.

Voici un exemple simple utilisant WinForms pour montrer le fonctionnement de ping en c #, en fournissant une adresse IP valide dans textBox1 et en cliquant sur button1, nous créons une instance du Ping class, une variable locale de PingReply, chaîne de la variable locale pour stocker l'adresse IP ou URL, puis nous affectons la variable locale PingReply que nous avons créée à la méthode Send Send, puis nous vérifions si la demande a abouti. en comparant l'état de la réponse à la propriété IPAddress.Success status, nous extrayons ensuite de PingReply variable locale les informations que nous devons afficher pour l'utilisateur, décrites ci-dessus:

using System;
using System.Net.NetworkInformation;
using System.Windows.Forms;

namespace PingTest1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Ping p = new Ping();
            PingReply r;
            string s;
            s = textBox1.Text;
            r = p.Send(s);

            if (r.Status == IPStatus.Success)
            {
                lblResult.Text = "Ping to " + s.ToString() + "[" + r.Address.ToString() + "]" + " Successful"
                   + " Response delay = " + r.RoundtripTime.ToString() + " ms" + "\n";
            }
        }

        private void textBox1_Validated(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(textBox1.Text) || textBox1.Text == "")
            {
                MessageBox.Show("Please use valid IP or web address!!");
            }
        }
    }
}
30
Ashraf Abusada