Per quanto riguarda la tua domanda, supponi di dover implementare un sistema in cui tutti i client connessi a un server possano sfidarsi l'un l'altro (a qualcosa). In questa ipotesi, il server deve tener traccia della lista di client ad esso connessi e i vari client devono poterla leggere quando vogliono. Quindi ho pensato che tramite le librerie RMI ogni client potesse avere una copia del server su cui richiamare alcuni metodi che esso mette a disposizione, come ad esempio il metodo getList().
La domanda nasce dalla volonta di creare una mappa completa con tutte le informazioni del client (a priori il server non può saperle finché il client non gliele comunica). Quindi la registrazione sulla mappa se la deve fare il client tramite RMI, ma deve trovare un modo per riconoscersi nella lista.
Magari c'erano modi migliori per farlo, ma spulciando un po' la rete mi è sembrata una strada appropriata.
Comunque ho trovato il metodo che cercavo:
dal socket del client recupero la porta locale: client.getLocalPort()
per ogni socket sul server verifico che socket.getPort() sia uguale alla localPort (questo nel metodo register(), che quindi come parametro avrà proprio la local port del client).
Quindi hai ragione, l'unico modo è tramite IP e porte, ma non avevo ben compreso il concetto di porta locale. Grazie mille del tuo aiuto!