Использование ping в C # достигается за счет использования метода Ping.Send(System.Net.IPAddress), который запускает запрос ping на предоставленный (действительный) IP-адрес или URL и получает ответ, который называется пакетом протокола управляющих сообщений Интернета (ICMP) . Пакет содержит заголовок из 20 байтов, который содержит данные ответа от сервера, получившего запрос проверки связи. Пространство System.Net.NetworkInformationимен .Net framework содержит класс с именем, PingReplyкоторый имеет свойства, предназначенные для преобразования ICMPответа и доставки полезной информации о проверяемом сервере, например:
- IPStatus : получает адрес узла, который отправляет эхо-ответ протокола управляющих сообщений Интернета (ICMP).
- IPAddress : получает количество миллисекунд, затраченных на отправку эхо-запроса протокола управляющих сообщений Интернета (ICMP) и получение соответствующего сообщения эхо-ответа ICMP.
- RoundtripTime (System.Int64) : получает параметры, используемые для передачи ответа на эхо-запрос протокола управляющих сообщений Интернета (ICMP).
- PingOptions (System.Byte []) : получает буфер данных, полученных в ответном эхо-сообщении протокола управляющих сообщений Интернета (ICMP).
Ниже приведен простой пример, WinFormsдемонстрирующий, как ping работает в C #. Предоставляя действительный IP-адрес textBox1и щелкая button1, мы создаем экземпляр Pingкласса, локальную переменную PingReplyи строку для хранения IP или URL-адреса. Мы назначаем метод PingReplyping Send, затем проверяем, был ли запрос успешным, сравнивая статус ответа со IPAddress.Successстатусом свойства . Наконец, мы извлекаем из PingReplyинформации, которую нам нужно отобразить для пользователя, которая описана выше.
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!!");
}
}
}
}