Originariamente inviato da fuoricorso
GRAZIE GRAZIE GRAZIE per la risposta.
I problemi da te elencati dovrei averli anche nel caso il mio server, dovrebbe risiedere su una macchina molto "potente" il cui compito è proprio quello di inviare file a ipotetici client?
In quel caso non dovresti avere problemi, ma il problema lo ritrovi nel client: se il client non ha sufficiente memoria per poter allocare un array di grandi dimensioni l'applicazione termina con un OutOfMemoryError.
In ogni caso, devi tenere presente che potresti non ottenere alcun beneficio se il client non ha una linea internet in grado di ricevere tutti quei dati in poco tempo e vi sarebbero rallentamenti.

Mi puoi toglire il dubbio che il mio codice vada bene anche su host diversi, visto che io lavoro solo sul mio PC dove c'è sia il cliente che il sever.
Sì: la comunicazione tramite socket funziona sia in locale che su Intranet/Internet.

P.S Se si devono usare blocchi di dimensioni maggiori ad esempio 10 kb, la dimensione del blocco inviato di volta in volta deve essere a conoscenza sia del client che del server, cioè quando il client legge deve usare una array di byte uguale a quello inviato, se l'ultimo frammento inviato è inferiore alla dimensione dell'array di byte usato ci possono essere dei problemi.
Il client può usare un array di dimensioni a piacere:
codice:
byte[] buffer = new byte[5 * 1024];   // buffer da 5 KB
int byteLetti = is.read( buffer );
Con questa istruzione verranno letti al massimo 5 KB di dati. Il numero effettivo di byte letti viene ritornato dalla read() nella variabile "byteLetti". Tale variabile potrà avere valori da -1 (errore in lettura, socket chiusa, fine dei dati) fino a 5120 (la dimensione massima dell'array).
Quindi, non c'è proprio alcun problema. Ed è importante sempre usare la variabile "byteLetti" per sapere quanti sono esattamente i valori "validi" dell'array. Se vengono letti 20 byte, i primi 20 byte saranno byte di dati validi, i rimanenti non vanno presi in considerazione.

se il file è di 175kb e l'array di 10kb quando viene inviato l'ultimo blocco che dovrebbe essere di 5kb si possono verificare dei problemi?
Come detto sopra, no, perchè vanno considerati solo i primi N byte e questi N è il valore della variabile "byteLetti".

Ciao.