模拟Ping操作的一个Java类
发布时间:2020-05-24 22:47:43 所属栏目:Java 来源:互联网
导读:模拟Ping操作的一个Java类
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 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进行的模拟。
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
