2010-09-11 41 views

Trả lời

26

Không gian tên System.Net.NetworkInformation là những gì bạn cần. link này có thêm chi tiết

public static string PingHost(string host) 
{ 
    //string to hold our return messge 
    string returnMessage = string.Empty; 

    //IPAddress instance for holding the returned host 
    IPAddress address = GetIpFromHost(ref host); 

    //set the ping options, TTL 128 
    PingOptions pingOptions = new PingOptions(128, true); 

    //create a new ping instance 
    Ping ping = new Ping(); 

    //32 byte buffer (create empty) 
    byte[] buffer = new byte[32]; 

    //first make sure we actually have an internet connection 
    if (HasConnection()) 
    { 
     //here we will ping the host 4 times (standard) 
     for (int i = 0; i < 4; i++) 
     { 
      try 
      { 
       //send the ping 4 times to the host and record the returned data. 
       //The Send() method expects 4 items: 
       //1) The IPAddress we are pinging 
       //2) The timeout value 
       //3) A buffer (our byte array) 
       //4) PingOptions 
       PingReply pingReply = ping.Send(address, 1000, buffer, pingOptions); 

       //make sure we dont have a null reply 
       if (!(pingReply == null)) 
       { 
        switch (pingReply.Status) 
        { 
         case IPStatus.Success: 
          returnMessage = string.Format("Reply from {0}: bytes={1} time={2}ms TTL={3}", pingReply.Address, pingReply.Buffer.Length, pingReply.RoundtripTime, pingReply.Options.Ttl); 
          break; 
         case IPStatus.TimedOut: 
          returnMessage = "Connection has timed out..."; 
          break; 
         default: 
          returnMessage = string.Format("Ping failed: {0}", pingReply.Status.ToString()); 
          break; 
        } 
       } 
       else 
        returnMessage = "Connection failed for an unknown reason..."; 
      } 
      catch (PingException ex) 
      { 
       returnMessage = string.Format("Connection Error: {0}", ex.Message); 
      } 
      catch (SocketException ex) 
      { 
       returnMessage = string.Format("Connection Error: {0}", ex.Message); 
      } 
     } 
    } 
    else 
     returnMessage = "No Internet connection found..."; 

    //return the message 
    return returnMessage; 
} 
+0

Bạn có thể đưa mã nguồn cho phương thức GetIpFromHost vào đây không? (Tôi hiểu rằng đó là trong liên kết, nhưng câu trả lời không thực sự làm việc mà không có nó.) Cảm ơn. – BrainSlugs83

+1

Trên thực tế, khi kiểm tra kỹ hơn, có vẻ như thay thế dòng đó bằng: "var address = Dns.GetHostEntry (host) .AddressList.First();" là đủ tốt - và nó sẽ không còn nuốt các ngoại lệ có giá trị nữa. – BrainSlugs83

+1

HasConnection() không được xác định. – Dave

7

Tôi sẽ sử dụng lớp Ping.

+8

Bạn làm cho nó có vẻ rõ ràng khi nhìn lại. –

+0

Vâng tôi biết. Tôi đã chờ đợi để đảm bảo câu trả lời đã được chấp nhận trước khi đăng bài. – linuxuser27

5

Hãy thử điều này

using System; 
using System.Net; 
using System.Net.NetworkInformation; 
using System.Text; 

namespace Examples.System.Net.NetworkInformation.PingTest 
{ 
    public class PingExample 
    { 
     // args[0] can be an IPaddress or host name. 
     public static void Main (string[] args) 
     { 
      Ping pingSender = new Ping(); 
      PingOptions options = new PingOptions(); 

      // Use the default Ttl value which is 128, 
      // but change the fragmentation behavior. 
      options.DontFragment = true; 

      // Create a buffer of 32 bytes of data to be transmitted. 
      string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 
      byte[] buffer = Encoding.ASCII.GetBytes (data); 
      int timeout = 120; 
      PingReply reply = pingSender.Send (args[0], timeout, buffer, options); 
      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); 
      } 
     } 
    } 
} 
+13

Vui lòng tham chiếu đoạn mã của bạn. Đó chỉ là một bản sao từ liên kết MSDN. – linuxuser27

Các vấn đề liên quan