Quote Originariamente inviata da gagostin Visualizza il messaggio
le mie difficoltà nascono dalla volontà di lavorare sullo stesso pc.
Mi spiego meglio: dal mio pc faccio partire un server (uso l'indirizzo di loopback per comodità ma potrei inserire anche l'IP reale); poi faccio partire 2 client in successione (sempre sullo stesso pc del server).
Il server, quindi, salva i 2 socket nella mappa, con valore null.
Ti ripeto che, in generale, a livello di socket sono indirizzo e porta a contraddistinguere un endpoint cioè uno dei lati del socket.

Quote Originariamente inviata da gagostin Visualizza il messaggio
Quando i client vanno a registrare le proprie info sulla mappa tramite il register(), come possono riconoscere qual è il socket che si riferisce a loro?
Quindi in un metodo invocato tramite RMI vuoi conoscere il socket che RMI sta usando? A naso credo non sia possibile. Ma non sono "esperto" su RMI, quindi preferisco non sparare scemenze.
Il fatto è che RMI nasconde tutto ciò che sta "sotto", ovvero tutti i dettagli di basso livello relativi alla comunicazione tra client e server. So che c'è la possibilità di definire delle "factory" per poter creare Socket/ServerSocket speciali (es. con cifratura) ma questo di per sé non aiuta a capire "chi" ha fatto la chiamata.
So che RemoteServer ha getClientHost() statico, che da dentro un metodo invocato con RMI ti permette di sapere il host del client. In questo momento non saprei dire se comprende la porta o no ... a naso credo di no (la documentazione parla solo di "host" e basta)

Domanda: perché devi fare questo mix di gestioni? Un conto è farsi un "protocollo" di comunicazione direttamente su socket ... un altro conto è usare RMI.