客户端
IcmpEchoReply reply = ping.Send(ip);
if (reply.status == (uint)IPStatus.Success)
{
IPAddress addr = new IPAddress(reply.address);
ShowMessage(String.Format("Reply from {0}: Echo size={1} time<{2}ms TTL={3}", addr, reply.dataSize, reply.roundTripTime, reply.ttl));
}
else
{
IPStatus ipStatus = (IPStatus)reply.status;
ShowMessage(String.Format("PING: transmit failed, error code {0}, {1}", reply.status.ToString(), ipStatus));
}
客户端调用的时候只需要调用Send()方法,然后分析IcmpEchoReply的结果。
图1
为了提高可用性,增加对域名的支持。
IPAddress address = null;
IPAddress[] addressList = null;
try
{
address = IPAddress.Parse(uri);
}
catch
{
try
{
IPHostEntry entry = Dns.GetHostEntry(uri);
addressList = entry.AddressList;
}
catch (Exception ex)
{
ShowMessage(String.Format("Ping request could not find host {0}. Please check the name and try again. {1}", textBoxAddress.Text, ex.Message));
}
}
if (address != null)
{
ShowMessage(String.Format("Pinging Host {0}", uri));
Ping(address);
}
else
{
for (int i = 0; i < addressList.Length; ++i)
{
ShowMessage(String.Format("Pinging Host {0} [{1}]", uri, addressList[i]));
Ping(addressList[i]);
}
}
当用户输入不是IP地址的时候,会对域名进行解释,把该域名的所对应的所有IP解释出来,存放到addressList里面,然后对每个IP进行Ping。
下面为ping www.google.com的例子,http://www.google.com/对应3个不同的IP。
图2