Почему я получаю PingException?

все работало час назад и много дней назад. Ссылка, которую я пытаюсь пинговать:

ссылка на ping

это код в form1:

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

, когда он пытается выполнить эту строку:

bool bval = nc.PingConnection(satellite_address);

он идет к nc класс:

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;
        }
    }
}

в классе nc при попытке сделать строку:

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

он прыгает в блок catch и бросает исключение PingException:

An исключение во время запроса ping

и затем в Form1 результат он возвращает, что нет доступа в интернет, но есть интернет, и я могу просматривать url-адрес без проблем.

это полное сообщение об исключении:

  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-SharpDownload FileDownloading-File-Project-Version-012Downloading FileNetworkConnection.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:

строка 33-это:

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

что может быть причиной того, что это исключение появляется ? он не появился до того, как моя программа теперь работает на некоторых yeras.

и что и как я должен справиться с этим ?

2 ответов


вы не можете передать полный URL в отправить метод класса Ping. Параметр string hostNameOrAddress должен быть

строка, идентифицирующая компьютер, являющийся местом назначения Эхо-сообщения ICMP. Значение, заданное для этого параметра может быть хоста или строковое представление IP-адреса.

так что вы можете только пройти в www.sat24.com или IP хоста 82.94.176.100 (взято из Командная строка ping www.sat24.com).

если вы хотите передать полный URL-адрес вашему методу, вам нужно извлечь хост из этого URL-адреса для выполнения Ping. Для этого случая вы можете взять класс Uri

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

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

"такой хост не известен"

моя ставка заключается в том, что такой хост не известен.

вы должны пинговать "www.sat24.com " нет"http://www.sat24.com/..."

Ping.Send не говорит, что он принимает 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=против 110).aspx