zoukankan      html  css  js  c++  java
  • C#实现Ping

    在app中,我们经常需要确定网络是否畅通,windows下自带ping.exe 那么我们C#中如何实现ping操作呢。

    Ping类位于System.Net.NetworkInformation下。通过它应用程序确定是否可通过网络访问远程计算机

     

    Ping可确定 是否可成功联系远程主机。如果存在或配置了代理服务器、网络地址转换 (NAT) 设备或防火墙,可能会妨碍 Ping 成功。 Ping 成功只是表示可以通过网络访问远程主机;但并不保证远程主机上存在更高级别的服务(例如 Web 服务器)。

    此类提供的功能类似于 Ping.exe 命令行工具。 SendSendAsync 方法将 Internet 控制消息协议 (ICMP) 回送请求消息发送到远程计算机并等待来自该计算机的 ICMP 回送答复消息。有关 ICMP 消息的详细说明,请参见 RFC 792,这可以在 http://www.ietf.org 上找到。

    PingOptions 类提供 TtlDontFragment 属性以控制如何传输 Internet 控制消息协议 (ICMP) 回送请求数据包。

    Ttl 属性为 Ping 类发送的数据包指定生存时间。此值指示在丢弃 Ping 数据包之前可以转发此数据包的路由节点数。如果要测试将数据包从源计算机发送到目标计算机所需的转发数(也称为跃点),设置此选项很有用。

    DontFragment 属性控制是否可将发送到远程主机的数据分成多个数据包。如果要测试用于传输数据包的路由器和网关的最大传输单元 (MTU),此选项很有用。

    PingOptions 类的实例被传递给 SendSendAsync 方法,PingReply 类通过 Options 属性返回 PingOptions 的实例

    Ping 类尝试将 Internet 控制消息协议 (ICMP) 回送请求发送到远程计算机并接收该计算机通过 ICMP 回送答复消息返回的信息。 Ping 类使用 PingReply 类的实例返回有关操作的信息,如操作状态以及发送请求和接收答复所用的时间。

    Send 方法直接返回 PingReply 类的实例。 SendAsync 方法在 PingCompletedEventHandler 方法的 PingCompletedEventArgs 参数中返回 PingReply。通过 Reply 属性访问 PingReply。

    如果 Status 的值不是 Success,则不应该使用由 RoundtripTimeOptionsBuffer 属性返回的值。 RoundtripTime 属性将返回零,Buffer 属性将返回空数组,而 Options 属性将返回 null

     1             //Ping 实例对象;
     2             Ping pingSender = new Ping();
     3             //ping选项;
     4             PingOptions options = new PingOptions();
     5             options.DontFragment = true;
     6             string data = "ping test data";
     7             byte[] buf = Encoding.ASCII.GetBytes(data);
     8             //调用同步send方法发送数据,结果存入reply对象;
     9             PingReply reply = pingSender.Send("www.baidu.com", 120, buf, options);
    10 
    11             if (reply.Status == IPStatus.Success)
    12             {
    13                 Console.WriteLine("主机地址::"+reply.Address);
    14                 Console.WriteLine("往返时间::"+reply.RoundtripTime);
    15                 Console.WriteLine("生存时间TTL::"+reply.Options.Ttl);
    16                 Console.WriteLine("缓冲区大小::"+reply.Buffer.Length);
    17                 Console.WriteLine("数据包是否分段::"+reply.Options.DontFragment);
    18             }

    //out put

    MSDN:Ping >>>   https://msdn.microsoft.com/zh-cn/library/system.net.networkinformation.ping%28v=vs.110%29.aspx

    MSDN:PingOptions >>>  https://msdn.microsoft.com/zh-cn/library/system.net.networkinformation.pingoptions%28v=vs.110%29.aspx

    MSDN:PingReply >>> https://msdn.microsoft.com/zh-cn/library/system.net.networkinformation.pingreply%28v=vs.110%29.aspx

  • 相关阅读:
    EasyMvc入门教程基本控件说明(6)进度条
    EasyMvc入门教程基本控件说明(3)时间线
    EasyMvc入门教程基本控件说明(4)折叠面板
    EasyMvc入门教程基本控件说明(11)菜单导航
    在一天的24小时之中,时钟的时针、分针和秒针完
    Maven Tutorial
    JXL操作Excel
    Beanutils的基本用法
    利用hibernate分析数据库中的表,属性以及对应的类的类名,字段
    beanutils的一个应用
  • 原文地址:https://www.cnblogs.com/2Yous/p/5801067.html
Copyright © 2011-2022 走看看