本文为大家分享了模拟 Ping 操作的一个 java 类 , 具体内容如下
Импорт java.io.ioexception; import java.net.inetadress; импорт java.net.unknownhostexception; /** * Создано Qiuju * 2014/9/21. */public class simple -inferments unnable {private final Object mendlock = new Object (); Частный логический iSend = false; private int прибыл частный int count; частный тайм -аут; Приватное название строки; private int mendcount; Приватная строка mip = null; Private Float Mlossrate = 1f; Private Float Mdelay = 0; public simpleping (string name, int count, int timeout) {count = mendcount = count; Тайм -аут = тайм -аут; Имя = имя; for (int i = 0; i <mendcount; i ++) {Thread Think = new Thread (this); Thread.SetDaemon (True); Thread.Start (); } if (! Isend) {try {synchronized (mendlock) {mendlock.wait (); }} catch (прерывание Exception e) {e.printStackTrace (); }}} private void setend (boolean isarived, длинная задержка, строка ip) {synchronized (mendlock) {count--; if (isiRived) {прибыл mdelay = (mdelay + задержка) / 2f; if (ip! = null) mip = ip; }} if (count == 0) setend (); } private void setend () {mlossrate = (mendcount - accesscount) / mendcount; Isend = true; синхронизированный (mendlock) {mendlock.notifyall (); }} @Override public void run () {long Delay = 0; Boolean Isarived = false; String ip = null; try {long startTime = System.currentTimeMillis (); InetAddress address = inetAddress.getbyName (имя); isiRived = address.iSreachable (тайм -аут); DELOST = SYSTEM.CurrentTimeMillis () - StartTime; ip = address.gethostaddress (); } catch (Unknownhostexception e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); } catch (Exception e) {e.printstackTrace (); } наконец {setEnd (isarived, delay, ip); }} public String getip () {return mip; } public float getLossrate () {return mlossrate; } public float getDelay () {return mdelay; } public boolean getIssucceed () {return прибыл }}在类中使用的是 :
long starttime = System.currentTimeMillis (); InetAddress address = inetAddress.getbyName (имя); isiRived = address.iSreachable (тайм -аут); DELOST = SYSTEM.CurrentTimeMillis () - StartTime; ip = address.gethostaddress ();
其中的 : Address.IsReachable (Timeout); 方法 , 但是这个方法有一定局限性;当是 root 模式下会发送 ICMP 进行 Ping 操作 这就比较真实了;但是如果是非 root 模式下则是使用的 сокет 进行的模拟。
之所以说是中间类 , 也就是因为这个原因没有采用这个类。
以上就是本文的全部内容 , 希望对大家的学习有所帮助。