• (转)用C#实现实现简单的 Ping 的功能,用于测试网络是否已经连通


    本文转载自:http://blog.csdn.net/xiamin/archive/2009/02/14/3889696.aspx

    用C#实现实现简单的 Ping 的功能,用于测试网络是否已经联通

    1. 根据IP地址获得主机名称

     /// <summary>
            /// 根据IP地址获得主机名称
            /// </summary>
            /// <param name="ip">主机的IP地址</param>
            /// <returns>主机名称</returns>
            public string GetHostNameByIp(string ip)
            {
                ip = ip.Trim();
                if (ip == string.Empty)
                    return string.Empty;
                try
                {
                    // 是否 Ping 的通
                    if (this.Ping(ip))
                    {
                        System.Net.IPHostEntry host = System.Net.Dns.GetHostEntry(ip);
                        return host.HostName;
                    }
                    else
                        return string.Empty;
                }
                catch (Exception)
                {
                    return string.Empty;
                }
            }

    说明:如果你的电脑可以上网你甚至可以查询到:IP地址“64.233.189.104”是 Google 的一个名为“hk-in-f104.google.com”的主机的IP地址。

     

    关于代码中 this.Ping(ip) 方法后面再说。

    既然说了如何“根据IP地址获得主机名称”,那就要再说说如何“根据主机名获得主机的IP地址”吧。

    2. 根据主机名获得主机的IP地址

     /// <summary>
            /// 根据主机名(域名)获得主机的IP地址
            /// </summary>
            /// <param name="hostName">主机名或域名</param>
            /// <example> GetIPByDomain("www.google.com");</example>
            /// <returns>主机的IP地址</returns>
            public string GetIpByHostName(string hostName)
            {
                hostName = hostName.Trim();
                if (hostName == string.Empty)
                    return string.Empty;
                try
                {
                    System.Net.IPHostEntry host = System.Net.Dns.GetHostEntry(hostName);
                    return host.AddressList.GetValue(0).ToString();
                }
                catch (Exception)
                {
                    return string.Empty;
                }
            }

    说明:如果你的电脑可以上网你甚至可以查询到:“www.google.com”的IP地址是“64.233.189.104”。

    最后,再说说C#实现简单的 Ping 的功能,用于测试网络是否已经联通。

    3. C#实现简单的 Ping 的功能,用于测试网络是否已经联通

    /// <summary>
            /// 是否能 Ping 通指定的主机
            /// </summary>
            /// <param name="ip">ip 地址或主机名或域名</param>
            /// <returns>true 通,false 不通</returns>
            public bool Ping(string ip)
            {
                System.Net.NetworkInformation.Ping p = new System.Net.NetworkInformation.Ping();
                System.Net.NetworkInformation.PingOptions options = new System.Net.NetworkInformation.PingOptions();
                options.DontFragment = true;
                string data = "Test Data!";
                byte[] buffer = Encoding.ASCII.GetBytes(data);
                int timeout = 1000; // Timeout 时间,单位:毫秒
                System.Net.NetworkInformation.PingReply reply = p.Send(ip, timeout, buffer, options);
                if (reply.Status == System.Net.NetworkInformation.IPStatus.Success)
                    return true;
                else
                    return false;
            }
    private void button1_Click(object sender, EventArgs e)//获取IP
            { textBox2.Text=GetIpByHostName(textBox1.Text);   }
      private void button2_Click(object sender, EventArgs e)//获取主机名
            {  textBox1.Text=GetHostNameByIp(textBox2.Text);   }
       private void button3_Click(object sender, EventArgs e)//获取本机IP
            {
                string hostName = System.Net.Dns.GetHostName();
                IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(hostName);
                //Dns.GetHostByName(myName);已过时
                IPAddress[] addr = ipEntry.AddressList;
                textBox2.Text = addr[0].ToString();
            }
            /// <summary>
            /// 局域网搜索事件
            /// </summary>
            private void LanSearch()
            {
    string localhost = (Dns.GetHostEntry(Dns.GetHostName()))
    .AddressList[0].ToString(); //本地主机IP地址
                string str = localhost.Substring(0, localhost.LastIndexOf("."));
                for (int i = 0; i < 255; i++) //建立255个线程扫描IP
                {
                    string ip = str + "." + i.ToString();
                    this.Text  = ip;
                    if (Ping(ip))
                    {
                        listBox1.Items.Add(ip);                       
                        Application.DoEvents(); 
                    }
                    progressBarSearch.Value = progressBarSearch.Value + 1;
                }
            }
            private void button4_Click(object sender, EventArgs e)//在线主机
            {
                LanSearch();
            }
  • 相关阅读:
    LINQ to XML 示例(转)
    (jQuery,Highcharts)前端图表系列之一 Highcharts (转)
    c#中Split等分割字符串的几种方法(转)
    Highcharts 强大的jQuery图表制作功能
    OpenFileDialog、SaveFileDialog常用屬性、對話框用法及得到系統特殊文件夾路徑(转)
    C# Regex 深入正则表达式(转)
    C#文件IO操作(转)
    免费Google地图API使用说明(转)
    Java遍历集合的几种方法分析(实现原理、算法性能、适用场合)
    C++ Web 开发框架 (CppCMS)
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/5063907.html
Copyright © 2020-2023  润新知