soluciones basadas en la toma de try/catch, podría no dar resultados precisos (la dirección de socket es "localhost "y en algunos casos el puerto podría estar" ocupado "no por la interfaz de bucle invertido y al menos en Windows he visto que esta prueba falla, es decir, el prot declarado falsamente como disponible).
Hay una biblioteca fresca llamado SIGAR, el siguiente código puede liarte:
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;
Aunque esta pregunta es acerca de cómo saber si un determinado puerto ya está en uso, puede haber aterrizado aquí tratando de encontrar una manera de obtener un número de puerto gratuito, que http://stackoverflow.com/questions/2675362/how-to-find-an-available-port (con un enlace a mi https: // gist .github.com/3429822) cubre mejor. – vorburger
¿Para qué? Si solo desea encontrar un socket vacante para escuchar, solo especifique cero. Cualquier técnica de exploración se hace responsable de los problemas de sincronización-ventana:. El puerto puede ser vacante cuando se escanea y ocupado cuando se va a reclamar en – EJP