Метод «isReachable» во многих случаях не использовался для меня. Вы можете прокрутить страницу вниз, чтобы увидеть мою альтернативу для простого тестирования, если вы в сети и можете разрешать внешние хосты (например, google.com) ... Что обычно работает на машинах * NIX.
Проблема
Об этом много болтовни:
Часть 1: Воспроизводимый пример проблемы
Обратите внимание, что в этом случае он не работает ,
//also, this fails for an invalid address, like "www.sjdosgoogle.com1234sd"
InetAddress[] addresses = InetAddress.getAllByName("www.google.com");
for (InetAddress address : addresses) {
if (address.isReachable(10000))
{
System.out.println("Connected "+ address);
}
else
{
System.out.println("Failed "+address);
}
}
//output:*Failed www.google.com/74.125.227.114*
Часть 2: Hackish обходной путь
В качестве альтернативы вы можете сделать это:
// in case of Linux change the 'n' to 'c'
Process p1 = java.lang.Runtime.getRuntime().exec("ping -n 1 www.google.com");
int returnVal = p1.waitFor();
boolean reachable = (returnVal==0);
Опция -c ping позволит ping просто попытаться добраться до сервера один раз (в отличие от бесконечного пинга, который мы использовали для использования на терминале).
Это вернет 0, если хост достижимы. В противном случае вы получите «2» в качестве возвращаемого значения.
Гораздо проще - но, конечно, это специфичная для платформы. И может быть некоторые предостережения о привилегиях для использования этой команды, но я нахожу, что это работает на моих машинах.
ПОЖАЛУЙСТА, обратите внимание: 1) Это решение не является качеством продукции. Это немного взломать. Если google не работает, или ваш интернет временно медленный, или, может быть, даже если есть какая-то забава в ваших привилегиях / системных настройках, если бы можно было вернуть ложные негативы (т. Е. Он мог выйти из строя, даже если входной адрес достигнут). 2) Ошибка isReachable является нерешенной проблемой. Опять же - есть несколько онлайн-ресурсов, указывающих на отсутствие «идеального» способа сделать это на момент написания этой статьи, из-за того, как JVM пытается достичь хостов - я думаю, что это неотъемлемо специфичная для платформы задача, которая, хотя и простая , еще недостаточно отвлечен JVM.
Вот один из способов использования las=TRUE
для поворота меток на оси Y и axis()
для новой оси Y с отрегулированными метками.
dates <- 1:10
returns <- runif(10)
plot(dates, returns, yaxt="n")
axis(2, at=pretty(returns), lab=pretty(returns) * 100, las=TRUE)
Если вы используете ggplot, вы можете использовать пакет scale .
library(scales)
plot + scale_y_continuous(labels = percent)
dates <- 1:100
returns <- runif(100)
yticks_val <- pretty_breaks(n=5)(returns)
plot(dates, returns, yaxt="n")
axis(2, at=yticks_val, lab=percent(yticks_val))
Основные характеристики:
Объединение двух ответов вместе @rengis @vladiim