模拟Ping操作的一个Java类

 更新时间:2016年03月18日 15:46:38   投稿:lijiao  
这篇文章主要为大家详细介绍了一个模拟Ping操作的Java类,感兴趣的小伙伴们可以参考一下

本文为大家分享了模拟Ping操作的一个Java类,具体内容如下

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
 
/**
 * Created by QiuJU
 * on 2014/9/21.
 */
public class SimplePing implements Runnable {
 private final Object mEndLock = new Object();
 private boolean IsEnd = false;
 
 private int arrivedCount = 0;
 
 private int Count;
 private int TimeOut;
 private String Name;
 
 private int mEndCount;
 private String mIp = null;
 private float mLossRate = 1f;
 private float mDelay = 0;
 
 
 public SimplePing(String name, int count, int timeOut) {
  Count = mEndCount = count;
  TimeOut = timeOut;
  Name = name;
  for (int i = 0; i < mEndCount; i++) {
   Thread thread = new Thread(this);
   thread.setDaemon(true);
   thread.start();
  }
  if (!IsEnd) {
   try {
    synchronized (mEndLock) {
     mEndLock.wait();
    }
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
 
 private void setEnd(boolean isArrived, long delay, String ip) {
  synchronized (mEndLock) {
   Count--;
   if (isArrived) {
    arrivedCount++;
    mDelay = (mDelay + delay) / 2f;
    if (ip != null)
     mIp = ip;
   }
  }
  if (Count == 0)
   setEnd();
 }
 
 private void setEnd() {
  mLossRate = (mEndCount - arrivedCount) / mEndCount;
 
  IsEnd = true;
  synchronized (mEndLock) {
   mEndLock.notifyAll();
  }
 }
 
 @Override
 public void run() {
  long delay = 0;
  boolean isArrived = false;
  String ip = null;
  try {
   long startTime = System.currentTimeMillis();
   InetAddress address = InetAddress.getByName(Name);
   isArrived = address.isReachable(TimeOut);
   delay = System.currentTimeMillis() - startTime;
   ip = address.getHostAddress();
  } catch (UnknownHostException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   setEnd(isArrived, delay, ip);
  }
 }
 
 public String getIp() {
  return mIp;
 }
 
 public float getLossRate() {
  return mLossRate;
 }
 
 public float getDelay() {
  return mDelay;
 }
 
 public boolean getIsSucceed() {
  return arrivedCount > 0;
 }
}

在类中使用的是:

long startTime = System.currentTimeMillis();
   InetAddress address = InetAddress.getByName(Name);
   isArrived = address.isReachable(TimeOut);
   delay = System.currentTimeMillis() - startTime;
   ip = address.getHostAddress();

其中的:address.isReachable(TimeOut);方法,但是这个方法有一定局限性;当是Root模式下会发送ICMP进行Ping操作,这就比较真实了;但是如果是非Root模式下则是使用的Socket进行的模拟。
之所以说是中间类,也就是因为这个原因没有采用这个类。

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关文章

  • 详解将Eclipse代码导入到AndroidStudio的两种方式

    详解将Eclipse代码导入到AndroidStudio的两种方式

    本篇文章主要介绍了详解将Eclipse代码导入到AndroidStudio的两种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 浅谈StringEntity 和 UrlEncodedFormEntity之间的区别

    浅谈StringEntity 和 UrlEncodedFormEntity之间的区别

    这篇文章主要介绍了StringEntity 和 UrlEncodedFormEntity之间的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • springboot+redis实现简单的热搜功能

    springboot+redis实现简单的热搜功能

    这篇文章主要介绍了springboot+redis实现一个简单的热搜功能,通过代码介绍了过滤不雅文字的过滤器,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Java的RocketMq水平扩展及负载均衡详解

    Java的RocketMq水平扩展及负载均衡详解

    这篇文章主要介绍了Java的RocketMq水平扩展及负载均衡详解,RocketMQ是一个分布式具有高度可扩展性的消息中间件,本文旨在探索在broker端,生产端,以及消费端是如何做到横向扩展以及负载均衡的,需要的朋友可以参考下
    2024-01-01
  • java读写二进制文件的解决方法

    java读写二进制文件的解决方法

    本篇文章是对java读写二进制文件的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Mybatis useGeneratedKeys参数用法及问题小结

    Mybatis useGeneratedKeys参数用法及问题小结

    这篇文章主要介绍了Mybatis useGeneratedKeys参数用法及遇到的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Java调用计算机摄像头拍照实现过程解析

    Java调用计算机摄像头拍照实现过程解析

    这篇文章主要介绍了Java调用计算机摄像头拍照实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 解决SpringBoot多模块发布时99%的问题

    解决SpringBoot多模块发布时99%的问题

    本文归纳了以下 8 个原则和发布时经常出现的 4 个问题的解决方案,掌握了这些原则和解决方案,几乎可以解决绝大数SpringBoot发布问题
    2019-07-07
  • 一篇文章带你入门java变量与类型

    一篇文章带你入门java变量与类型

    这篇文章主要给大家介绍了关于Java基本知识点之变量和数据类型的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • BeanUtils.copyProperties()所有的空值不复制问题

    BeanUtils.copyProperties()所有的空值不复制问题

    这篇文章主要介绍了BeanUtils.copyProperties()所有的空值不复制问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论