Решения на основе сокетов try / catch могут не дать точных результатов (адрес сокета - «localhost», и в некоторых случаях порт может быть «занят» не интерфейсом обратной связи, и по крайней мере в Windows, где я видел это) тест не пройден, т.е. прот ошибочно объявлен доступным).
Существует классная библиотека с именем SIGAR , следующий код может подключить вас:
Sigar sigar = new Sigar();
int flags = NetFlags.CONN_TCP | NetFlags.CONN_SERVER | NetFlags.CONN_CLIENT; NetConnection[] netConnectionList = sigar.getNetConnectionList(flags);
for (NetConnection netConnection : netConnectionList) {
if ( netConnection.getLocalPort() == port )
return false;
}
return true;