Il mio dubbio è sull'istruzione len=src.read(b). Il file può anche non esistere sul client, ma il server perché dovrebbe rimanere in attesa in eterno dei dati?
Il discorso vale a prescindere dei messaggi d'errore. Un client maligno può benissimo non avvertire il server di proposito e viceversa. Dovrebbe essere buona norma chiudere la connessione automaticamente se len non si aggiorna più. Provo a vedere se il metodo setSoTimeout serve proprio a questo.