技术开发 频道

.NET Compact Framework下的Ping(ICMP)的开发

 客户端

 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


查看原文地址

0
相关文章