Non devi chiudere i canali di input e output dopo ogni dialogo.
Sul server, dopo aver ricevuto il file, effettui una in.close(): questo provoca la chiusura, non solo del DataInputStream, ma anche del canale sul quale è stato costruito.
Puoi creare un secondo canale di input sull'InputStream della socket, ma senza chiudere il DataInputStream.
Il mio consiglio, comunque, è quello di costruire un solo oggetto sul canale di input e di usare sempre quell'oggetto per ricevere dati (di qualsiasi formato siano, ricorda: più è generale la comunicazione, più deve essere generale l'InputStream).
Ciao.![]()