Estou com um projeto e preciso pegar o ip da maquina, mas só consigo o local host (“127.0.0.1”), e eu preciso do ipv4 pelo menos. E se souberem alguma forma de identificar uma porta disponível automaticamente, seria de grande ajuda.
Pra desktop acredito que isso aqui resolva:
try {
System.out.println(InetAddress.getLocalHost().getHostAddress());
} catch (Exception e) {
throw new Exception(e);
}
Esse método verifica se uma determinada porta está disponível.
public static final int PORTA_MINIMA = 1;
public static final int PORTA_MAXIMA = 65535;
public static boolean portaDisponivel(int port) {
if (port < PORTA_MINIMA || port > PORTA_MAXIMA) {
throw new IllegalArgumentException("Porta inválida: " + port);
}
try (ServerSocket serverSocket = new ServerSocket(port);
DatagramSocket datagramSocket = new DatagramSocket(port)) {
return true; // se chegou até aqui, então a porta está disponível
} catch (IOException e) {
return false; // se entrou aqui, então a porta não está disponível
}
}
Esse método retorna uma porta disponível:
public static int encontrarUmaPortaDisponivel() {
try (ServerSocket socket = new ServerSocket(0)) { // ao especificar porta 0, o ServerSocket vai "ouvir" em qualquer porta livre
return socket.getLocalPort(); // ao retornar o socket é fechado devidamente por causa do try-with-resources.
} catch (IOException e) {
System.out.println("Não foi possível obter uma porta disponível: " + e.getMessage());
return -1;
}
}