Użycie polecenia ping w języku C # uzyskuje się za pomocą metody Ping.Send(System.Net.IPAddress)
, która uruchamia żądanie ping na podany (prawidłowy) adres IP lub adres URL i uzyskuje odpowiedź nazywaną pakietem protokołu ICMP (Internet Control Message Protocol) . Pakiet zawiera nagłówek o długości 20 bajtów, który zawiera dane odpowiedzi z serwera, który odebrał żądanie ping. Przestrzeń System.Net.NetworkInformation
nazw platformy .Net zawiera klasę o nazwie, PingReply
która ma właściwości przeznaczone do tłumaczenia ICMP
odpowiedzi i dostarczania przydatnych informacji o serwerze pingowanym, takich jak:
- IPStatus : Pobiera adres hosta, który wysyła odpowiedź echa protokołu ICMP (Internet Control Message Protocol).
- IPAddress : Pobiera liczbę milisekund potrzebnych do wysłania żądania echa protokołu ICMP (Internet Control Message Protocol) i odebrania odpowiedniego komunikatu odpowiedzi echa ICMP.
- RoundtripTime (System.Int64) : Pobiera opcje używane do przesyłania odpowiedzi na żądanie echa protokołu ICMP (Internet Control Message Protocol).
- PingOptions (System.Byte []) : Pobiera bufor danych odebranych w komunikacie odpowiedzi echa protokołu ICMP (Internet Control Message Protocol).
Poniżej znajduje się prosty przykład WinForms
pokazujący, jak działa ping w języku C #. Podając prawidłowy adres IP textBox1
i klikając button1
, tworzymy wystąpienie Ping
klasy, zmienną lokalną PingReply
i ciąg do przechowywania adresu IP lub URL. Przypisujemy PingReply
do Send
metody ping , a następnie sprawdzamy, czy żądanie się powiodło, porównując stan odpowiedzi ze IPAddress.Success
stanem właściwości . Na koniec wyodrębniamy z PingReply
informacji, które musimy wyświetlić użytkownikowi, co opisano powyżej.
using System;
using System.Net.NetworkInformation;
using System.Windows.Forms;
namespace PingTest1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Ping p = new Ping();
PingReply r;
string s;
s = textBox1.Text;
r = p.Send(s);
if (r.Status == IPStatus.Success)
{
lblResult.Text = "Ping to " + s.ToString() + "[" + r.Address.ToString() + "]" + " Successful"
+ " Response delay = " + r.RoundtripTime.ToString() + " ms" + "\n";
}
}
private void textBox1_Validated(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(textBox1.Text) || textBox1.Text == "")
{
MessageBox.Show("Please use valid IP or web address!!");
}
}
}
}