(转)用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();
        }
时间: 2024-08-05 19:06:07

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

C# Ping的例子,可用于测试网络,延迟xx毫秒

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.NetworkInformation; namespace PingExample { publi

线上一个简单检测Ping状态的邮件报警脚本

Step1.安装sendmail来发邮件 # yum -y install sendmail # /etc/init.d/sendmail start # chkconfig sendmail on Step2.安装邮件客户端 # yum -y install mutt 2.1添加发件人信息,如下 # vim /etc/Muttrc set charset="utf-8"           #设置发邮件编码 set envelope_from=yes set rfc2047_para

Swift和C混合Socket编程实现简单的ping命令

这个是用Mac下的Network Utility工具实现ping命令,用Wireshark抓取的ICMP数据包: 发送ICMP数据包内容 接受ICMP数据包内容 一.icmp结构 要真正了解ping命令实现原理,就要了解ping命令所使用到的TCP/IP协议.ICMP(Internet Control Message,网际控制报文协议)是为网关和目标主机而提供的一种差错控制机制,使它们在遇到差错时能把错误报告给报文源发方.ICMP协议是IP层的 一个协议,但是由于差错报告在发送给报文源发方时可能

Linux主机实现简单的路由转发功能

只要在Linux主机上添加一些简单的路由条目, 这些Linux主机就可以充当简单路由器的功能. 在实际生产坏境中, 当我们需要一台路由器简单作为转发数据, 但是手上却没有路由器的话, 我们就可以指定一台Linux主机充当一个简单的路由器,实现路由简单的转发. 上面所诉尤其强调简单, 所以说只是实现简单的路由的功能, 如果要实现非常复杂的功能的话, 一台Linux主机可能无法实现你想要的条件. 实验坏境: 基于VMware上的4台虚拟主机,主机名为R1.R2的两台主机(都是centos6.8系统)

批量ping IP地址命令测试是否通

批量ping IP地址命令测试是否通 #!/bin/bash#--------------------------------------------------------------------------------------------------echo -e " "echo -e " ==============================================="echo -e "| Thanks for using this

ping 测试网络上正在活动的主机 sh脚本

代码如下: #!/bin/bash for ip in 192.168.2.{100..150}; do ( ping $ip -c 2 &> /dev/null; if [ $? -eq 0 ]; then echo $ip is alive fi )& done wait 此脚本用于测试宿舍网络活动的主机 宿舍内网络环境为腾达的一个无线路由搭建 测试地址池范围指定为100~150 脚本采用并行处理,减少时间 执行效果: 注 : 此时共有5台电脑.4台无线设备在线.与实验吻合.

独立完成的第一个c++面向对象程序(虽然很简单&#160;以后会增加功能)

一个简单的商品展示程序 功能如下: 1.输出一张商品表(嘻嘻 就这一个功能) 代码如下: #include<iostream> #include<string> using namespace std; class Goods { private: int amount; double price; string name; public: Goods(); int AddAmount(int); int LoseAmount(int); int SetGoods(int,doub

简单的购物商城功能

实现了简单的购物商城功能1.展现商品及价格2.商品加入购物车3.购物车商品显示及最终价格结算. fruit = {'Apple': 3, 'Pear': 2, 'Banana': 3, 'Lemon': 5, 'Watermelon': 4} books = {'语文': 4, '英语': 3, '数学': 5, '体育': 1} cart = {} # goods = [] print('水果如下价格:') print(fruit) print('课本价格如下:') print(books)

百度地图API制作类似 百度地图的路线导航界面并实现简单的路线规划功能

之前我们讲了怎么在百度地图上设置Marker(如A点..) 和弹出框(跟随Marker的,Marker移动的时候也是会跟着移动的),接着又觉得百度地图自带的放大缩小不(fei)是(chang)很(de)漂(chou)亮,我们自定义了放大缩小的控件,本篇我们将制作类似百度地图API制作类似百度地图的公交/驾车/行走/查询界面并实现简单的路线规划功能. 先来张截图:   这个界面的实现其实是使用的SlidingUpPanelLayout 开源库从而使得可以跟随手指下拉上划: 其实布局也没什么好讲的,