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

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

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

///<summary>
       
///根据IP地址获得主机名称
       
///</summary>
       
///<param name="ip">主机的IP地址</param>
       
///<returns>主机名称</returns>
publicstring GetHostNameByIp(string ip)
        {
            ip = ip.Trim();
           
if (ip == string.Empty)
               
returnstring.Empty;
           
try
            {
               
// 是否 Ping 的通
if (this.Ping(ip))
                {
                    System.Net.IPHostEntry host = System.Net.Dns.GetHostEntry(ip);
                   
return host.HostName;
                }
               
else
                   
returnstring.Empty;
            }
           
catch (Exception)
            {
               
returnstring.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>
publicstring GetIpByHostName(string hostName)
        {
            hostName = hostName.Trim();
           
if (hostName == string.Empty)
               
returnstring.Empty;
           
try
            {
                System.Net.IPHostEntry host = System.Net.Dns.GetHostEntry(hostName);
               
return host.AddressList.GetValue(0).ToString();
            }
           
catch (Exception)
            {
               
returnstring.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>
publicbool 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)
               
returntrue;
           
else
               
returnfalse;
        }

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();

        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值