2012-08-03 30 views
57

Cuando hago ping a un sistema remoto con Windows, dice que no hay respuesta, pero cuando hago ping con C# dice éxito. Windows es correcto, el dispositivo no está conectado. ¿Por qué mi código puede hacer ping satisfactoriamente cuando Windows no lo hace?Usando ping en C#

Aquí está mi código:

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"); 
} 
+3

revisa el siguiente ejemplo, publicado en la parte inferior de esta página cuando se hace clic en el enlace de MSDN http://msdn.microsoft .com/en-us/library/system.net.networkinformation.ping.aspx o http://stackoverflow.com/questions/1281176/making-a-ping-inside-of-my-c-sharp-application – MethodMan

+5

Debe estar comparando PR.Status con IPStatus.S éxito La comparación de cadenas no es la herramienta correcta en este caso. –

+0

Después de realizar su ping, ¿cuáles son los valores de algunas de las propiedades PingReply, (como 'PR.Address',' PR.RoundtripTime', 'PR.reply.Buffer.Length', y' PR.Options.Ttl')? Además, ¿está seguro de que tiene la dirección IP correcta en su código y no una dirección IP de prueba? –

Respuesta

127
using System.Net.NetworkInformation;  

public static bool PingHost(string nameOrAddress) 
{ 
    bool pingable = false; 
    Ping pinger = new Ping(); 
    try 
    { 
     PingReply reply = pinger.Send(nameOrAddress); 
     pingable = reply.Status == IPStatus.Success; 
    } 
    catch (PingException) 
    { 
     // Discard PingExceptions and return false; 
    } 
    return pingable; 
} 
15
using System.Net.NetworkInformation; 

    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!!"); 
       } 
      } 
     } 

    } 
+7

¡Felicitaciones por incluir la referencia de uso! – mattpm

-1
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(); 
}