Ah, ok... pensavo che quell'errore venisse lanciato lato client. Effettivamente, quell'eccezione viene sollevata anche nel caso lato server non venga specificato il nome del file, ma solo il percorso.
Ciò che intendevo io è che non è consigliabile usare ObjectInput/OutputStream per la trasmissione di files. E' più conveniente usare gli stream semplici:
Lato client:
codice:
OutputStream os = socket.getOutputStream();
// Leggo il file e lo invio a blocchi di N byte (esempio: 4096 byte = 4 KB)
byte[] buffer = new byte[4096];
FileInputStream fis = new FileInputStream( fileDaLeggere );
int bytesLetti = 0;
while((bytesLetti = fis.read(buffer)) >= 0) {
os.write(buffer, 0, bytesLetti);
}
os.flush();
Lato server:
codice:
// Leggo da InputStream il file:
InputStream is = socket.getInputStream();
// Lo leggerò a blocchi di 4 KB, finchè non è finito
FileOutputStream fos = new FileOutputStream( fileDaScrivere );
byte[] buffer = new byte[4096];
int byteLetti = 0;
while((bytesLetti = is.read(buffer)) >= 0) {
fos.write(buffer, 0, bytesLetti);
}
fos.flush();
Questo è solo la base: non c'è gestione delle eccezioni, non c'è trasmissione di numero di byte da leggere/scrivere che potrebbe essere una buona cosa per il controllo dei dati, ecc.
Ciao.