2012-08-03 36 views
57

Khi tôi Ping một hệ thống từ xa có cửa sổ, nó cho biết không có trả lời, nhưng khi tôi ping với C# nó nói thành công. Windows chính xác, thiết bị không được kết nối. Tại sao mã của tôi có thể ping thành công khi Windows không?Sử dụng ping trong C#

Đây là mã của tôi:

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

Kiểm tra các ví dụ sau đây đăng tải ở dưới cùng của trang này khi bạn click vào Link MSDN http://msdn.microsoft .com/vi-us/library/system.net.networkinformation.ping.aspx hoặc http://stackoverflow.com/questions/1281176/making-a-ping-inside-of-my-c-sharp-application – MethodMan

+5

Bạn nên so sánh PR.Status với IPStatus.S uccess. So sánh chuỗi không phải là công cụ chính xác trong trường hợp này. –

+0

Sau khi bạn thực hiện lệnh ping, các giá trị của một số thuộc tính PingReply là gì, (như 'PR.Address',' PR.RoundtripTime', 'PR.reply.Buffer.Length' và' PR.Options.Ttl')? Bạn cũng chắc chắn rằng bạn có địa chỉ IP chính xác trong mã của mình chứ không phải địa chỉ IP thử nghiệm? –

Trả lời

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

Kudo để bao gồm cả tham chiếu sử dụng! – 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(); 
}