模擬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模式下會發(fā)送ICMP進行Ping操作,這就比較真實了;但是如果是非Root模式下則是使用的Socket進行的模擬。
之所以說是中間類,也就是因為這個原因沒有采用這個類。
以上就是本文的全部內容,希望對大家的學習有所幫助。
相關文章
詳解將Eclipse代碼導入到AndroidStudio的兩種方式
本篇文章主要介紹了詳解將Eclipse代碼導入到AndroidStudio的兩種方式,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12淺談StringEntity 和 UrlEncodedFormEntity之間的區(qū)別
這篇文章主要介紹了StringEntity 和 UrlEncodedFormEntity之間的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06Mybatis useGeneratedKeys參數用法及問題小結
這篇文章主要介紹了Mybatis useGeneratedKeys參數用法及遇到的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05BeanUtils.copyProperties()所有的空值不復制問題
這篇文章主要介紹了BeanUtils.copyProperties()所有的空值不復制問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06