2014-05-09 10 views
6

Es hat alles vor einer Stunde und vor vielen Tagen funktioniert. Der Link i ping versuchen ist:Warum bekomme ich PingException?

Link to ping

Dies ist der Code in form1 ist:

nc = new NetworkConnection(); 
bool bval = nc.PingConnection(satellite_address); 

if (bval) 
{ 
    label19.Visible = true; 
    label19.Text = "Internet Access"; 
} 
else 
{ 
    label19.Visible = true; 
    label19.Text = "No Internet Access"; 
} 

Wenn es versucht, diese Zeile auszuführen:

bool bval = nc.PingConnection(satellite_address); 

Es wird die nc Klasse:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.NetworkInformation; 
using System.IO; 
using System.Windows.Forms; 

namespace mws 
{ 
    class NetworkConnection 
    { 
     public NetworkConnection() 
     {  
     } 

     public bool PingConnection(string url) 
     { 
      bool Result = false; 

      using (Ping pp = new Ping()) 
      { 
       byte[] buffer = Encoding.ASCII.GetBytes("samplestring"); 
       int timeout = 120; 

       try 
       { 
        PingReply reply = pp.Send(url, timeout, buffer); 
        if (reply.Status == IPStatus.Success) 
         Result = true; 
       } 
       catch (Exception) 
       { 
        Result = false; 
       } 
      } 
      return Result; 
     } 
    } 
} 

in der NC-Klasse, wenn die Linie zu tun versuchen:

PingReply reply = pp.Send(url, timeout, buffer); 

Es ist an den catch-Block springen und wirft einen PingException:

Eine Ausnahme während einer Ping-Anforderung aufgetreten

Und dann in Form1 das Ergebnis es ist, dass es keinen Internetzugang gibt, aber es gibt Internet und ich kann auf die URL keine Probleme surfen.

Dies ist die komplette Ausnahmemeldung:

System.Net.NetworkInformation.PingException was caught 
    HResult=-2146233079 
    Message=An exception occurred during a Ping request. 
    Source=System 
    StackTrace: 
     at System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout, Byte[] buffer, PingOptions options) 
     at System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout, Byte[] buffer) 
     at mws.NetworkConnection.PingConnection(String url) in d:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\NetworkConnection.cs:line 33 
    InnerException: System.Net.Sockets.SocketException 
     HResult=-2147467259 
     Message=No such host is known 
     Source=System 
     ErrorCode=11001 
     NativeErrorCode=11001 
     StackTrace: 
      at System.Net.Dns.GetAddrInfo(String name) 
      at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6) 
      at System.Net.Dns.GetHostAddresses(String hostNameOrAddress) 
      at System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout, Byte[] buffer, PingOptions options) 
     InnerException: 

Linie 33:

PingReply reply = pp.Send(url, timeout, buffer); 

Was könnte der Grund sein, dass diese Ausnahme auftauchen? Es ist nicht aufgetaucht, bevor mein Programm für einige Jahre funktioniert.

Und was oder wie soll ich damit umgehen?

+0

Sind Sie hinter einem Proxy? – Yahya

+0

Yaha nein. Ich bin nicht hinter mir. – user3596190

+0

Zeile 33 ist kein Problem, Problem ist in Ping-Anfrage. –

Antwort

9

Sie akzeptiert nicht können Übergeben Sie eine vollständige URL an die Send Methode der Ping-Klasse. Der Parameter string hostNameOrAddress muss

sein

Ein String, der den Computer identifiziert, der das Ziel für die ICMP-Echonachricht ist. Der für diesen Parameter angegebene Wert kann ein Hostname oder eine Zeichenfolgendarstellung einer IP-Adresse sein.

So können Sie in www.sat24.com oder die IP-Adresse des Host-Pass nur 82.94.176.100 (von der Kommandozeile genommen ping www.sat24.com).

Wenn Sie eine vollständige URL an Ihre Methode übergeben möchten, müssen Sie den Host von dieser URL extrahieren, um Ihren Ping durchzuführen. Für diesen Fall können Sie die Uri-Klasse nehmen

Uri uri = new Uri(url); 
PingReply reply = pp.Send(uri.Host, timeout, buffer); 
+0

danke. Tippfehler in meiner IP-Adresse. ein Komma anstelle einer Periode. schwer zu erkennen! –

0
PingReply reply = pp.Send(url, timeout, buffer); 

"Nein Host ist unbekannt"

Meine Wette ist, dass keine solche Host bekannt ist.

Sie sollten ping "www.sat24.com" nicht "http://www.sat24.com/ ..."

Ping.Send sagt nicht, es eine URL

public PingReply Send(
    string hostNameOrAddress, 
    int timeout, 
    byte[] buffer 
) 

hostNameOrAddress A String that identifies the computer that is the destination for the ICMP echo message. The value specified for this parameter can be a host name or a string representation of an IP address. 

http://msdn.microsoft.com/en-us/library/ms144954(v=vs.110).aspx