2010-09-11 15 views

cevap

26

System.Net.NetworkInformation Ad Alanı, ihtiyacınız olan şeydir. Bu link fazla ayrıntı

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

Lütfen GetIpFromHost yönteminin kaynağını buraya ekleyebilir misiniz? (Bağlantıda olduğunu anlıyorum, ama cevap gerçekten onsuz çalışmıyor.) Teşekkürler. – BrainSlugs83

+1

Aslında, daha yakından incelendiğinde şu satırın yerini alması gerekiyor: "var address = Dns.GetHostEntry (host) .AddressList.First();" yeterince iyi - ve artık değerli istisnaları yutmayacaktı. – BrainSlugs83

+1

HasConnection() tanımlanmadı. – Dave

7

Ping sınıfını kullanırdım.

+8

Bunu geçmişe bariz görünüyor olun. –

+0

Evet biliyorum. Yanıtları göndermeden önce kabul edildiğinden emin olmak için bekledim. – linuxuser27

5

sahiptir deneyin bu

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

Lütfen kod snippet'inize başvurun. Bu sadece MSDN bağlantısından bir kopyasıdır. – linuxuser27