2013-09-09 4 views
1

Я хочу, чтобы получить время задержки между 2 ПК, таким образом:Почему метод isReachable() всегда возвращает «false»?

currentTime = System.currentTimeMillis();   
isPinged = InetAddress.getByName("192.168.6.18").isReachable(2000);     
currentTime = System.currentTimeMillis() - currentTime; 
System.out.println("----"+isPinged+":"+currentTime); 

но результаты всегда «ложь», кроме «локальный», я попытался изменить getByName("192.168.6.18") к компьютеру из локальной сети или на веб-сайте как "www.facebook.com", но это не имеет никакого эффекта

+7

Вы использовали что-то вроде 'ping', чтобы убедиться, что вы на самом деле * может * достигать хозяина в вопросе? – chrylis

+3

, пожалуйста, обратитесь к этому вопросу: http://stackoverflow.com/questions/9922543/why-does-inetaddress-isreachable-return-false-when-i-can-ping-the-ip-address –

+0

yes Я использовал ' ping' в CMD, и он работал – wyyzaw

ответ

-3

Используйте этот метод для ПК с Windows

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.InetAddress; 
import java.net.UnknownHostException; 

public Boolean ping(String ipaddress) 
{ 
    Runtime runtime = Runtime.getRuntime(); 
    String cmds = "ping "+ipaddress; 
    System.out.println(cmds); 
    Process proc; 
    try { 
     proc = runtime.exec(cmds); 
     proc.getOutputStream().close(); 
     InputStream inputstream = proc.getInputStream(); 
     InputStreamReader inputstreamreader = new InputStreamReader(inputstream); 
     BufferedReader bufferedreader = new BufferedReader(inputstreamreader); 
     String line; 
     while ((line = bufferedreader.readLine()) != null) { 
      if(line.contains("Reply from "+ipaddress+":")) 
       { 
       return true;  
       } 
      } 
     }catch (IOException e) { 
    e.printStackTrace(); 
    } 
    return false; 
} 

для получения более подробной информации см Ping class

для ПК, кроме окна используют

public Boolean IsReachable(String ipaddress) { 
    try {    
     final InetAddress host = InetAddress.getByName(ipaddress); 

     try { 
      return host.isReachable(3000); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 
+0

А что, если его ОС не имеет команды 'ping'? А что, если результат от 'ping' не содержит текста на английском языке? Это не масштабируемое решение. – qqilihq

+0

Это нехорошее общее решение. (1) Команда 'ping' может не существовать. (2) Выход 'ping' может не быть в этом формате - OS X будет указывать' x bytes from', а на неанглийских версиях Windows сообщения будут переведены на локальный язык. –

+0

что с этим wronge ?? Я обновил код –