时间:2021-05-19
本文为大家分享了模拟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; }}在类中使用的是:
其中的:address.isReachable(TimeOut);方法,但是这个方法有一定局限性;当是Root模式下会发送ICMP进行Ping操作,这就比较真实了;但是如果是非Root模式下则是使用的Socket进行的模拟。
之所以说是中间类,也就是因为这个原因没有采用这个类。
以上就是本文的全部内容,希望对大家的学习有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
下面分享的是一个Java多线程模拟停车场系统的小实例(Java的应用还是很广泛的,哈哈),具体代码如下:Park类publicclassPark{boolean
Java标准API中有个Robot类,该类可以实现屏幕截图,模拟鼠标键盘操作这些功能。这里只展示其屏幕截图。 截图的关键方法createScreenCaptu
本文实例为大家分享了java模拟ATM功能的具体代码,供大家参考,具体内容如下有三个类:Test.java、Customer.java、CustomerDAO.
使用java来实现ping功能。并写入文件。为了使用java来实现ping的功能,有人推荐使用java的Runtime.exec()方法来直接调用系统的Ping
Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类