模拟Ping操作的一个Java类_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进行的模拟。
之所以说是中间类,也就是因为这个原因没有采用这个类。

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java类
Ping操作
java 模拟ping、java模拟耗时操作、java 模拟浏览器操作、java 模拟网页操作、java模拟浏览器的操作,以便于您获取更多的相关知识。

时间: 2025-01-26 20:12:07

模拟Ping操作的一个Java类_java的相关文章

java-求做一个Java类的设计的题

问题描述 求做一个Java类的设计的题 Account类:代表一个银行账户 balance属性:代表账户里的金额 deposit方法:向账户中存钱,如果传入的金额大于0,存钱,返回true,否则不存钱,返回false withdraw方法:从账户中取钱,如果余额够,取钱,返回true,如果余额不足,不取钱,返回false display方法:用于查询当前帐户金额 解决方案 public class Account { private double balance;//定义账户的金额 /** *

java-怎么获取一个JAVA类中各个方法的代码块

问题描述 怎么获取一个JAVA类中各个方法的代码块 特殊需求:获取一个JAVA类中各个方法的代码块来查找方法中是否包含某个关键字,现在通过发射只能拿到方法的属性和注释,有没有API或者其他方法,求告知,3Q 没金币了..对不起大家 PS:获取本地源代码的,不是运行时的class 解决方案 myeclipse中调试调用带有静态代码块的类时出现java.lang.NoClassDefFoundError的处理方法在DWR中实现直接获取一个JAVA类的返回值的两种方法java代码获取当前类类名.方法名

ibatis insert一个java类里面的属性怎么写

问题描述 比如数据库表Grade中有SchoolID这个字段,但是实际Java建立的模型Grade类里包含的是School类,School类里有SchoolID字段,是不是这样写 schoolID=#school.schoolID# 问题补充:redstarofsleep 写道 解决方案 对,比如:<insert id="insertGroup" parameterClass="bo.GroupInfo"> <![CDATA[ insert int

不部署Web应用(无web.xml文件),如何让一个java类在服务器里运行?

问题描述 印象中感觉Ejb, 不知道可否 还是有其他方法 解决方案 当然可以,用注解的方式.servlet3.0之后可以做到不用web.xml.用注解解决方案二:调用 main 方法 加载其他 就可以了!启动一个 服务,一个jvm

Groovy探索之MOP 十四 对Java类使用Groovy语言的MOP

既然Groovy语言是Java语言的扩展,那么我们在使用Groovy语言的时候,就很难与Java语言真正脱得了干系,那怕我们是在做一个纯Groovy语言的项目,如Grails项目.我们可能在Groovy代码中会用到遗留的Java类和包:也可能是为了性能的原因,我们不得不在Groovy语言中使用到Java类:等等. 如果我们要对于Java类使用Groovy语言的MOP,比如我们想给一个Java类的对象在运行期内添加一个方法.那么我们该怎么办呢? 比如,我们有如下的一个Java类: //(Java代

Java 类的热替换 —— 概念、设计与实现

构建基于 Java 的在线升级系统 对于许多关键性业务或者庞大的 Java 系统来说,如果必须暂停系统服务才能进行系统升级,既会大大影响到系统的可用性,同时也增加了系统的管理和维护成本.因此,如果能够方便地在不停止系统业务的情况下进行系统升级,则可以很好地解决上述问题.在本文中,我们将基于实例,对构建在线升级 Java 系统的基础技术和设计原则进行了深入的讲解.相信读者能够根据文中的技术构建出自己的在线升级系统来.   Java ClassLoader 技术剖析 在本文中,我们将不对 Java

在JavaScript中调用Java类和接口的方法_javascript技巧

前言 本文中所有的代码使用 JavaScript 编写,但你也可以用其他兼容 JSR 223 的脚本语言.这些例子可作为脚本文件也可以在交互式 Shell 中一次运行一个语句的方式来运行.在 JavaScript 中访问对象的属性和方法的语法与 Java 语言相同. 本文包含如下几部分: 1.访问 Java 类 为了在 JavaScript 中访问原生类型或者引用 Java 类型,可以调用 Java.type() 函数,该函数根据传入的完整类名返回对应对象的类型.下面代码显示如何获取不同的对象类

在ASP中使用简单Java类

方式一:把Java类注册成ActiveX组件步骤一:创建一个Java类,命名为Test.javapublic class Test{ public String getWord() { return "Hello World"; }}步骤二:编译成class文件,并拷贝到系统盘:\WINNT\java\trustlib目录下,然后注册成ActiveX组件javareg /register /class:Test /progid:Test步骤三:在ASP中使用Set obj=Create

用UML描述Java类

Java程序员的角度阐述UML和对象建模问题,是一个深入浅出的实用性介绍. 虽然从历史和基本理念方面来探讨UML非常吸引人,但我们还是直接从Java代码开 始,看看UML如何描述Java类,再在叙述过程中插入一些历史和基本理念方面的知 识. UML类图 在Java中,我们用下面的代码声明两个公用类,每一个Java类放入一个文件, 文件的名字就是Java类的名字加上扩展名.java: public class Person{} public class Organization{} UML是Uni