Ping Classe

Definição

Permite a uma aplicação determinar se um computador remoto é acessível através da rede.

public ref class Ping : System::ComponentModel::Component
public ref class Ping : IDisposable
public ref class Ping : System::ComponentModel::Component, IDisposable
public class Ping : System.ComponentModel.Component
public class Ping : IDisposable
public class Ping : System.ComponentModel.Component, IDisposable
type Ping = class
    inherit Component
type Ping = class
    interface IDisposable
type Ping = class
    inherit Component
    interface IDisposable
Public Class Ping
Inherits Component
Public Class Ping
Implements IDisposable
Public Class Ping
Inherits Component
Implements IDisposable
Herança
Herança
Ping
Implementações

Exemplos

O exemplo de código seguinte demonstra o uso da Ping classe de forma síncrona.

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);
            }
        }
    }
}
open System.Net.NetworkInformation
open System.Text

// args[0] can be an IPaddress or host name.
[<EntryPoint>]
let main args =
    let pingSender = new Ping()

    // Use the default Ttl value which is 128,
    // but change the fragmentation behavior.
    let options = PingOptions()
    options.DontFragment <- true

    // Create a buffer of 32 bytes of data to be transmitted.
    let data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    let buffer = Encoding.ASCII.GetBytes data
    let timeout = 120
    let reply: PingReply = pingSender.Send(args.[0], timeout, buffer, options)

    match reply.Status with
    | IPStatus.Success ->
        printfn "Address: %O" reply.Address
        printfn "RoundTrip time: %d" reply.RoundtripTime
        printfn "Time to live: %d" reply.Options.Ttl
        printfn "Don't fragment: %b" reply.Options.DontFragment
        printfn "Buffer size: %d" reply.Buffer.Length
        0
    | _ ->
        eprintfn "Error sending ping: %O" reply
        eprintfn "Error was: %O" reply.Status
        1

O exemplo de código seguinte demonstra o uso da Ping classe de forma assíncrona.

using System;
using System.Text;
using System.Net;
using System.Net.NetworkInformation;
using System.ComponentModel;
using System.Threading;

namespace Examples.System.Net.NetworkInformation.PingTest
{
    public class PingExample
    {
        public static void Main (string[] args)
        {
            if (args.Length == 0)
                throw new ArgumentException ("Ping needs a host or IP Address.");

            string who = args[0];
            AutoResetEvent waiter = new AutoResetEvent (false);

            Ping pingSender = new Ping ();

            // When the PingCompleted event is raised,
            // the PingCompletedCallback method is called.
            pingSender.PingCompleted += new PingCompletedEventHandler (PingCompletedCallback);

            // Create a buffer of 32 bytes of data to be transmitted.
            string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
            byte[] buffer = Encoding.ASCII.GetBytes (data);

            // Wait 12 seconds for a reply.
            int timeout = 12000;

            // Set options for transmission:
            // The data can go through 64 gateways or routers
            // before it is destroyed, and the data packet
            // cannot be fragmented.
            PingOptions options = new PingOptions (64, true);

            Console.WriteLine ("Time to live: {0}", options.Ttl);
            Console.WriteLine ("Don't fragment: {0}", options.DontFragment);

            // Send the ping asynchronously.
            // Use the waiter as the user token.
            // When the callback completes, it can wake up this thread.
            pingSender.SendAsync(who, timeout, buffer, options, waiter);

            // Prevent this example application from ending.
            // A real application should do something useful
            // when possible.
            waiter.WaitOne ();
            Console.WriteLine ("Ping example completed.");
        }

        private static void PingCompletedCallback (object sender, PingCompletedEventArgs e)
        {
            // If the operation was canceled, display a message to the user.
            if (e.Cancelled)
            {
                Console.WriteLine ("Ping canceled.");

                // Let the main thread resume.
                // UserToken is the AutoResetEvent object that the main thread
                // is waiting for.
                ((AutoResetEvent)e.UserState).Set ();
            }

            // If an error occurred, display the exception to the user.
            if (e.Error != null)
            {
                Console.WriteLine ("Ping failed:");
                Console.WriteLine (e.Error.ToString ());

                // Let the main thread resume.
                ((AutoResetEvent)e.UserState).Set();
            }

            PingReply reply = e.Reply;

            DisplayReply (reply);

            // Let the main thread resume.
            ((AutoResetEvent)e.UserState).Set();
        }

        public static void DisplayReply (PingReply reply)
        {
            if (reply == null)
                return;

            Console.WriteLine ("ping status: {0}", reply.Status);
            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);
            }
        }
    }
}

Observações

As aplicações utilizam a Ping classe para detetar se um computador remoto é acessível.

A topologia da rede pode determinar se Ping consegue contactar com sucesso um host remoto. A presença e configuração de proxies, equipamentos de tradução de endereços de rede (NAT) ou firewalls podem impedir Ping o sucesso. Um sucesso Ping indica apenas que o host remoto pode ser alcançado na rede; a presença de serviços de nível superior (como um servidor Web) no host remoto não é garantida.

Esta classe oferece funcionalidades semelhantes à ferramenta de linha de comandos Ping.exe. Os Send métodos e SendAsync enviam uma mensagem de pedido de eco do Internet Control Message Protocol (ICMP) para um computador remoto e aguardam uma mensagem de resposta de eco ICMP desse computador. Para uma descrição detalhada das mensagens ICMP, consulte o RFC 792, disponível em https://www.ietf.org.

Os seguintes tipos são usados com a Ping classe e são descritos em detalhe abaixo.

Nome do tipo Descrição
IPStatus Define códigos de estado que descrevem o resultado de uma mensagem de pedido de eco ICMP.
PingOptions Permite configurar ou recuperar as definições que controlam quantas vezes o pacote de pedido pode ser encaminhado (Ttl), e se pode ser fragmentado (DontFragment ).
PingReply Contém os resultados de um pedido de eco ICMP.
PingException Descartado se ocorrer um erro irrecuperável.
PingCompletedEventArgs Contém os dados associados a PingCompleted eventos, que são ativados quando uma SendAsync chamada é concluída ou cancelada.
PingCompletedEventHandler O delegado que fornece o método de callback invocado quando uma SendAsync chamada é concluída ou cancelada.

Os Send métodos e SendAsync retornam a resposta num PingReply objeto. A PingReply.Status propriedade devolve um IPStatus valor para indicar o resultado do pedido.

Ao enviar o pedido, deve especificar o computador remoto. Pode fazê-lo fornecendo uma cadeia de nomes de host, um endereço IP em formato de string ou um IPAddress objeto.

Também pode especificar qualquer um dos seguintes tipos de informação:

  • Dados para acompanhar o pedido. Especificar buffer permite-lhe aprender o tempo necessário para que um pacote de determinado tamanho viaje para o host remoto e a unidade máxima de transmissão do caminho da rede. (Veja as Send sobrecargas de ou SendAsync que tomam um buffer parâmetro.)

  • Se o pacote ICMP Echo pode ser fragmentado durante o trânsito. (Veja a DontFragment propriedade e as Send sobrecargas de ou SendAsync que tomam um options parâmetro.)

  • Quantas vezes os nós de encaminhamento, como routers ou gateways, conseguem encaminhar o pacote antes de chegar ao computador de destino ou ser descartado. (Ver Ttl e os Send ou SendAsync sobrecarregam que tomam um options parâmetro.)

  • O prazo dentro do qual a resposta deve ser recebida. (Veja as Send sobrecargas de ou SendAsync que tomam um timeout parâmetro.

A Ping classe oferece métodos tanto síncronos como assíncronos para enviar o pedido. Se a sua aplicação bloquear enquanto espera uma resposta, use os Send métodos; estes métodos são síncronos. Se a sua aplicação não deve bloquear, use os métodos assíncronos SendAsync . Uma chamada para SendAsync executa-se no seu próprio thread que é automaticamente alocado a partir do pool de threads. Quando a operação assíncrona termina, ela eleva o PingCompleted evento. As aplicações utilizam um PingCompletedEventHandler delegado para especificar o método chamado para PingCompleted eventos. Deve adicionar um PingCompletedEventHandler delegado ao evento antes de ligar SendAsync. O método do delegado recebe um PingCompletedEventArgs objeto que contém um PingReply objeto que descreve o resultado da SendAsync chamada.

Não pode usar a mesma instância da Ping classe para gerar múltiplos pedidos ICMP Echo simultâneos. Ligar Send enquanto uma SendAsync chamada está em curso ou ligar SendAsync várias vezes antes de todas as chamadas anteriores terem sido concluídas causa um InvalidOperationException.

Construtores

Name Description
Ping()

Inicializa uma nova instância da Ping classe.

Propriedades

Name Description
CanRaiseEvents

Obtém um valor que indica se o componente pode gerar um evento.

(Herdado de Component)
Container

Obtém o IContainer que contém o Component.

(Herdado de Component)
DesignMode

Obtém um valor que indica se o Component está atualmente em modo de design.

(Herdado de Component)
Events

Obtém a lista de gestores de eventos que estão ligados a isto Component.

(Herdado de Component)
Site

Obtém ou define o ISite do Component.

(Herdado de Component)

Métodos

Name Description
CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
Dispose()

Liberta os recursos não geridos e dispõe dos recursos geridos usados pelo Ping.

Dispose()

Liberta todos os recursos utilizados pelo Component.

(Herdado de Component)
Dispose(Boolean)

Liberta os recursos não geridos usados pelo Ping objeto e, opcionalmente, elimina os recursos geridos.

Dispose(Boolean)

Liberta os recursos não geridos usados pelo Component e opcionalmente liberta os recursos geridos.

(Herdado de Component)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetLifetimeService()
Obsoleto.

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetService(Type)

Devolve um objeto que representa um serviço fornecido pelo Component ou pelo seu Container.

(Herdado de Component)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
InitializeLifetimeService()
Obsoleto.

Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
OnPingCompleted(PingCompletedEventArgs)

Eleva o PingCompleted evento.

Send(IPAddress, Int32, Byte[], PingOptions)

Tenta enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) com o buffer de dados especificado para o computador que possui o especificado IPAddress e recebe uma correspondente mensagem de resposta de eco ICMP desse computador. Esta sobrecarga permite especificar um valor de time-out para a operação e controlar os valores de fragmentação e Time-to-Live para o pacote de mensagens de eco ICMP.

Send(IPAddress, Int32, Byte[])

Tenta enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) com o buffer de dados especificado para o computador que possui o especificado IPAddress, e receber uma correspondente mensagem de resposta de eco ICMP desse computador. Esta sobrecarga permite-lhe especificar um valor de time-out para a operação.

Send(IPAddress, Int32)

Tenta enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) com o buffer de dados especificado para o computador que possui o especificado IPAddress, e receber uma correspondente mensagem de resposta de eco ICMP desse computador. Este método permite-lhe especificar um valor de time-out para a operação.

Send(IPAddress, TimeSpan, Byte[], PingOptions)

Tentativas de enviar uma mensagem de eco do Protocolo de Mensagens de Controlo da Internet (ICMP) para o computador que tenha o especificado IPAddress, e de receber uma correspondente mensagem de resposta de eco ICMP desse computador.

Send(IPAddress)

Tenta enviar uma mensagem de eco do Protocolo de Mensagens de Controlo da Internet (ICMP) para o computador que tem o especificado IPAddress, e receber uma correspondente mensagem de resposta de eco ICMP desse computador.

Send(String, Int32, Byte[], PingOptions)

Tenta enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) com o buffer de dados especificado para o computador especificado, e receber uma correspondente mensagem de resposta de eco ICMP desse computador. Esta sobrecarga permite especificar um valor de time-out para a operação e a fragmentação de controlo e valores Time-to-Live para o pacote ICMP.

Send(String, Int32, Byte[])

Tenta enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) com o buffer de dados especificado para o computador especificado, e receber uma correspondente mensagem de resposta de eco ICMP desse computador. Esta sobrecarga permite-lhe especificar um valor de time-out para a operação.

Send(String, Int32)

Tenta enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) para o computador especificado e recebe uma correspondente mensagem de resposta de eco ICMP desse computador. Este método permite-lhe especificar um valor de time-out para a operação.

Send(String, TimeSpan, Byte[], PingOptions)

Tenta enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) para o computador especificado e receber uma correspondente mensagem de resposta ICMP desse computador.

Send(String)

Tenta enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) para o computador especificado e recebe uma correspondente mensagem de resposta de eco ICMP desse computador.

SendAsync(IPAddress, Int32, Byte[], Object)

Tenta de forma assíncrona enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) com o buffer de dados especificado para o computador que possui o especificado IPAddress, e receber uma correspondente mensagem de resposta de eco ICMP desse computador. Esta sobrecarga permite-lhe especificar um valor de time-out para a operação.

SendAsync(IPAddress, Int32, Byte[], PingOptions, Object)

Tenta de forma assíncrona enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) com o buffer de dados especificado para o computador que possui o especificado IPAddress, e receber uma correspondente mensagem de resposta de eco ICMP desse computador. Esta sobrecarga permite especificar um valor de time-out para a operação e controlar os valores de fragmentação e Time-to-Live para o pacote de mensagens de eco ICMP.

SendAsync(IPAddress, Int32, Object)

Tenta de forma assíncrona enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) para o computador que tem o especificado IPAddress, e receber uma correspondente mensagem de resposta de eco ICMP desse computador. Esta sobrecarga permite-lhe especificar um valor de time-out para a operação.

SendAsync(IPAddress, Object)

Tenta de forma assíncrona enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) para o computador que tem o especificado IPAddress, e receber uma correspondente mensagem de resposta de eco ICMP desse computador.

SendAsync(String, Int32, Byte[], Object)

Tenta de forma assíncrona enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) com o buffer de dados especificado para o computador especificado, e receber uma correspondente mensagem de resposta de eco ICMP desse computador. Esta sobrecarga permite-lhe especificar um valor de time-out para a operação.

SendAsync(String, Int32, Byte[], PingOptions, Object)

Tenta de forma assíncrona enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) com o buffer de dados especificado para o computador especificado, e receber uma correspondente mensagem de resposta de eco ICMP desse computador. Esta sobrecarga permite especificar um valor de time-out para a operação e a fragmentação de controlo e valores Time-to-Live para o pacote ICMP.

SendAsync(String, Int32, Object)

Tenta de forma assíncrona enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) para o computador especificado e receber uma correspondente mensagem de resposta de eco ICMP desse computador. Esta sobrecarga permite-lhe especificar um valor de time-out para a operação.

SendAsync(String, Object)

Tenta de forma assíncrona enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) para o computador especificado e receber uma correspondente mensagem de resposta de eco ICMP desse computador.

SendAsyncCancel()

Cancela todos os pedidos assíncronos pendentes para enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) e recebe uma correspondente mensagem de resposta de eco ICMP.

SendPingAsync(IPAddress, Int32, Byte[], PingOptions)

Envia uma mensagem de eco do Protocolo de Mensagens de Controlo da Internet (ICMP) com o buffer de dados especificado para o computador que tem o especificado IPAddress, e recebe uma correspondente mensagem de resposta de eco ICMP desse computador como uma operação assíncrona. Esta sobrecarga permite especificar um valor de time-out para a operação, um buffer para enviar e receber, e controlar a fragmentação e os valores Time-to-Live para o pacote de mensagens de eco ICMP.

SendPingAsync(IPAddress, Int32, Byte[])

Envie uma mensagem de eco do Protocolo de Mensagens de Controlo da Internet (ICMP) com o buffer de dados especificado para o computador que tenha o especificado IPAddress, e que receba uma correspondente mensagem de resposta de eco ICMP desse computador como uma operação assíncrona. Esta sobrecarga permite especificar um valor de time-out para a operação e um buffer para enviar e receber.

SendPingAsync(IPAddress, Int32)

Envie uma mensagem de eco do Protocolo de Mensagens de Controlo da Internet (ICMP) com o buffer de dados especificado para o computador que tenha o especificado IPAddress, e que receba uma correspondente mensagem de resposta de eco ICMP desse computador como uma operação assíncrona. Esta sobrecarga permite-lhe especificar um valor de time-out para a operação.

SendPingAsync(IPAddress, TimeSpan, Byte[], PingOptions, CancellationToken)

Envia uma mensagem de eco do Protocolo de Mensagens de Controlo da Internet (ICMP) com o buffer de dados especificado para o computador que tem o especificado IPAddress, e recebe uma correspondente mensagem de resposta de eco ICMP desse computador como uma operação assíncrona. Esta sobrecarga permite especificar um valor de time-out para a operação, um buffer para enviar e receber, valores de fragmentação de controlo e Time-to-Live, e um CancellationToken para o pacote de mensagens de eco ICMP.

SendPingAsync(IPAddress)

Envie uma mensagem de eco do Protocolo de Mensagens de Controlo da Internet (ICMP) com o buffer de dados especificado para o computador que tenha o especificado IPAddress, e que receba uma correspondente mensagem de resposta de eco ICMP desse computador como uma operação assíncrona.

SendPingAsync(String, Int32, Byte[], PingOptions)

Envia uma mensagem de eco do Protocolo de Mensagens de Controlo da Internet (ICMP) com o buffer de dados especificado para o computador especificado, e recebe uma correspondente mensagem de resposta de eco ICMP desse computador como uma operação assíncrona. Esta sobrecarga permite especificar um valor de time-out para a operação, um buffer para enviar e receber, e controlar a fragmentação e os valores Time-to-Live para o pacote de mensagens de eco ICMP.

SendPingAsync(String, Int32, Byte[])

Envia uma mensagem de eco do Protocolo de Mensagens de Controlo da Internet (ICMP) com o buffer de dados especificado para o computador especificado, e recebe uma correspondente mensagem de resposta de eco ICMP desse computador como uma operação assíncrona. Esta sobrecarga permite especificar um valor de time-out para a operação e um buffer para enviar e receber.

SendPingAsync(String, Int32)

Envia uma mensagem de eco do Protocolo de Mensagens de Controlo da Internet (ICMP) com o buffer de dados especificado para o computador especificado, e recebe uma correspondente mensagem de resposta de eco ICMP desse computador como uma operação assíncrona. Esta sobrecarga permite-lhe especificar um valor de time-out para a operação.

SendPingAsync(String, TimeSpan, Byte[], PingOptions, CancellationToken)

Envia uma mensagem de eco do Internet Control Message Protocol (ICMP) com o buffer de dados especificado para o computador especificado, e recebe uma correspondente mensagem de resposta de eco ICMP desse computador como uma operação assíncrona. Esta sobrecarga permite especificar um valor de time-out para a operação, um buffer para enviar e receber, valores de fragmentação de controlo e Time-to-Live, e um CancellationToken para o pacote de mensagens de eco ICMP.

SendPingAsync(String)

Envia uma mensagem de eco do Protocolo de Mensagens de Controlo da Internet (ICMP) com o buffer de dados especificado para o computador especificado, e recebe uma correspondente mensagem de resposta de eco ICMP desse computador como uma operação assíncrona.

ToString()

Devolve a String contendo o nome do Component, se existir. Este método não deve ser ultrapassado.

(Herdado de Component)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

evento

Name Description
Disposed

Ocorre quando o componente é eliminado por uma chamada ao Dispose() método.

(Herdado de Component)
PingCompleted

Ocorre quando uma operação assíncrona para enviar uma mensagem de eco do Internet Control Message Protocol (ICMP) e receber a correspondente mensagem de resposta de eco ICMP é concluída ou é cancelada.

Implementações de Interface Explícita

Name Description
IDisposable.Dispose()

Liberta todos os recursos usados pelas instâncias da Ping classe.

Aplica-se a

Ver também