From 7cba416a5a43f4c72689a1ecd19ac7042c0fef68 Mon Sep 17 00:00:00 2001 From: rubenpirreram Date: Tue, 5 May 2026 19:27:11 +0200 Subject: [PATCH] Fix: RMI no localhost --- .../it/polimi/ingsw/gc14/ServerLauncher.java | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java b/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java index 252a9da..0f43343 100644 --- a/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java +++ b/src/main/java/it/polimi/ingsw/gc14/ServerLauncher.java @@ -10,8 +10,10 @@ import it.polimi.ingsw.gc14.Network.TCP.Server.TCPServer; import it.polimi.ingsw.gc14.View.TUI.TUI; import java.rmi.RemoteException; +import java.util.*; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; +import java.net.*; /** @@ -107,7 +109,14 @@ public class ServerLauncher { playerList = new LimitedList<>(5, ()->{}); BlockingQueue actionQueue = new LinkedBlockingQueue<>(); GameController gameController = new GameController(); - RMIServer serverRMI = new RMIServer(gameController, 1099, actionQueue, playerList); + String IP; + try { + IP=chooseNetworkInterface(new Scanner(System.in)); + } catch (Exception e) { + throw new RuntimeException(e); + } + + RMIServer serverRMI = new RMIServer(gameController, 1099, actionQueue, playerList,IP); TCPServer serverTCP = new TCPServer(gameController, 8080, actionQueue, playerList); ServerLauncher launcher = new ServerLauncher(actionQueue, gameController, serverRMI, serverTCP); @@ -156,4 +165,36 @@ public class ServerLauncher { } } } + public static String chooseNetworkInterface(Scanner scanner) throws Exception { + List ips = new ArrayList<>(); + + // Lista tutte le interfacce attive con IP reale + Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); + while (interfaces.hasMoreElements()) { + NetworkInterface ni = interfaces.nextElement(); + + // Salta loopback, interfacce spente o virtuali + if (!ni.isUp() || ni.isLoopback() || ni.isVirtual()) continue; + + Enumeration addresses = ni.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress addr = addresses.nextElement(); + // Solo IPv4 + if (addr instanceof Inet4Address) { + System.out.println("[" + ips.size() + "] " + ni.getDisplayName() + " -> " + addr.getHostAddress()); + ips.add(addr.getHostAddress()); + } + } + } + + if (ips.isEmpty()) throw new Exception("Nessuna interfaccia disponibile"); + if (ips.size() == 1) { + System.out.println("Una sola interfaccia trovata, uso: " + ips.get(0)); + return ips.get(0); + } + + System.out.print("Scegli interfaccia: "); + int choice = Integer.parseInt(scanner.nextLine().trim()); + return ips.get(choice); + } }