在 C# 中使用 ping 是通过使用方法来实现的,该方法Ping.Send(System.Net.IPAddress)
对提供的(有效)IP 地址或 URL 运行 ping 请求并获得称为Internet 控制消息协议 (ICMP) 数据包的响应。该数据包包含一个 20 字节的标头,其中包含来自接收 ping 请求的服务器的响应数据。.Net 框架System.Net.NetworkInformation
命名空间包含一个名为的类,该类PingReply
具有旨在翻译ICMP
响应并提供有关被 ping 服务器的有用信息的属性,例如:
- IPStatus:获取发送 Internet 控制消息协议 (ICMP) 回显回复的主机的地址。
- IPAddress:获取发送 Internet 控制消息协议 (ICMP) 回显请求并接收相应的 ICMP 回显回复消息所用的毫秒数。
- RoundtripTime (System.Int64):获取用于将回复传输到 Internet 控制消息协议 (ICMP) 回显请求的选项。
- PingOptions (System.Byte[]):获取在 Internet 控制消息协议 (ICMP) 回显回复消息中接收到的数据缓冲区。
以下是一个简单的示例,WinForms
用于演示 ping 在 c# 中的工作原理。通过在 中提供一个有效的 IP 地址textBox1
并单击button1
,我们将创建一个Ping
类的实例、一个局部变量PingReply
和一个用于存储 IP 或 URL 地址的字符串。我们分配PingReply
给 pingSend
方法,然后通过比较回复的状态和属性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!!");
}
}
}
}