102 votes

Utilisation de ping en c#

Lorsque j'effectue un ping d'un système distant avec Windows, le système indique qu'il n'y a pas de réponse, mais lorsque j'effectue un ping avec c#, le système indique qu'il a réussi. Windows est correct, le périphérique n'est pas connecté. Pourquoi mon code est-il capable d'effectuer un ping avec succès alors que 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");
}

243voto

JamieSee Points 6010
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;
}

49voto

user2459714 Points 41

L'utilisation de ping en C# est réalisée en utilisant la méthode Ping.Send(System.Net.IPAddress) qui exécute une requête ping vers l'adresse IP ou l'URL fournie (valide) et obtient une réponse, appelée un Paquet du protocole de message de contrôle Internet (ICMP) . Le paquet contient un en-tête de 20 octets qui contient les données de réponse du serveur qui a reçu la requête ping. Le cadre .Net System.Net.NetworkInformation contient une classe appelée PingReply qui a des propriétés conçues pour traduire le ICMP et fournit des informations utiles sur le serveur concerné, telles que.. :

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

Voici un exemple simple utilisant WinForms pour démontrer comment le ping fonctionne en c#. En fournissant une adresse IP valide dans textBox1 et en cliquant sur button1 nous créons une instance de la Ping une variable locale PingReply et une chaîne pour stocker l'adresse IP ou URL. Nous attribuons PingReply au ping Send puis nous vérifions si la demande a abouti en comparant l'état de la réponse à la propriété IPAddress.Success statut. Enfin, nous extrayons de PingReply les informations que nous devons afficher pour l'utilisateur, qui sont 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!!");
                }
            }
        }
    }

2voto

saleem basha Points 29
Imports System.Net.NetworkInformation

Public Function PingHost(ByVal nameOrAddress As String) As Boolean
    Dim pingable As Boolean = False
    Dim pinger As Ping
    Dim lPingReply As PingReply

    Try
        pinger = New Ping()
        lPingReply = pinger.Send(nameOrAddress)
        MessageBox.Show(lPingReply.Status)
        If lPingReply.Status = IPStatus.Success Then

            pingable = True
        Else
            pingable = False
        End If

    Catch PingException As Exception
        pingable = False
    End Try
    Return pingable
End Function

1voto

Lucas Ethen Points 2716
private async void Ping_Click(object sender, RoutedEventArgs e)
{
    Ping pingSender = new Ping();
    string host = @"stackoverflow.com";
    await Task.Run(() =>{
         PingReply reply = pingSender.Send(host);
         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("Address: {0}", reply.Status);
         }
   });           
}

-11voto

Mr.Mayar Points 13
private void button26_Click(object sender, EventArgs e)
{
    System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
    proc.FileName = @"C:\windows\system32\cmd.exe";
    proc.Arguments = "/c ping -t " + tx1.Text + " ";
    System.Diagnostics.Process.Start(proc);
    tx1.Focus();
}

private void button27_Click(object sender, EventArgs e)
{
    System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
    proc.FileName = @"C:\windows\system32\cmd.exe";
    proc.Arguments = "/c ping  " + tx2.Text + " ";
    System.Diagnostics.Process.Start(proc);
    tx2.Focus();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X