Quote Originariamente inviata da gagostin Visualizza il messaggio
Come può il client risalire al socket con cui è stato registrato sul server?
In sostanza pensavo che il metodo accept() di server socket riportasse sul server il socket creato sul client all'avvio, cioè con il new Socket("127.0.0.1", 13001), invece a quanto pare non è così.

di conseguenza tutti i client avranno l'IP di loopback e di conseguenza non posso usare l'indirizzo IP come discriminante tra un socket e l'altro
Non ho letto tutto il codice postato, non ho molto tempo ora, però tieni presente questo di seguito.

Innanzitutto su una rete di computer ogni interfaccia di rete (cablata o wireless che sia) è identificata da un indirizzo IP (v4 e/o v6) che può essere assegnato staticamente o dinamicamente tramite DHCP. Ma di certo deve essere univoco all'interno della rete, altrimenti ci sono conflitti e problemi vari. Il 127.0.0.1 è il "loopback" e nessuno lo vede sulla rete. È solo ad uso interno della macchina.
Quindi ogni interfaccia sulla rete ha un indirizzo che sicuramente non è il loopback.

Quando la accept() ti fornisce un Socket, esso contiene di base 4 informazioni: l'indirizzo e porta locale (del server) e l'indirizzo e porta "remoti" (del client). E questi ultimi sono appunto fondamentali per individuare l'endpoint a cui è connesso il server!