Scorrendo velocemente il tuo codice non mi viene in mente nessun modo per chiudere esplicitamente il socket con il metodo close() , tuttavia tieni presente che la chiusura di un socket avviene automaticamente quando uno dei suoi stream si chiude, o alla fine del programma o quando finisce out-of-scope. Il tuo codice rientra in quest'ultimo caso, tuttavia però i suoi stream sono ancora ancorati agli oggetti fromServer e toServer, pertanto magari la chiusura la devi ottenere implicitamente chiudendo loro.

Onestamente ti dico che non comprendo molto questa scelta di implementazione, ma poichè anchio sono agli inizi con Java magari mi sfugge quali siano i suoi "punti di forza". Fosse stato per me avrei implementato un socket come field della classe come ti ho mostrato nel primo codice che ti ho postato. Magari se il tu tutor ti saprà dirti qualcosa di più su questa scelta mi farebbe piacere capire gli eventuali perchè.