Originariamente inviato da AtoXx
mi si chiude la connessione ed io non voglio che si chiuda.
Domanda: e perché non vuoi che si chiuda? Forse .... perché vuoi gestire più trasferimenti con la stessa connessione? Allora bene, ok. Ma devi stabilire un "protocollo" di comunicazione, anche minimale.

E la cosa più semplice in questi casi è quella di inviare prima dello stream di dati del file una informazione sulla lunghezza di questo stream. Questa comunque è una regola abbastanza generale, quella cioè di anticipare al destinatario quanti byte si deve aspettare.

Visto che usi DataOutputStream, semplicemente scrivi un int che indica la lunghezza del file. E il destinatario (l'altro host nel tuo caso il client) saprà da subito quanti byte aspettarsi e quindi potrà operare di conseguenza.

E nota che a meno tu sappia che i file sono relativamente piccoli, NON dovresti istanziare un array per l'intero file! In questi casi basta leggere/scrivere a blocchi di N byte (in genere un buffer di lunghezza fissa, es. 1024 byte o giù di lì ...).