Buonasera. Di seguito riporto una parte di codice di una classe client e una di una classe server, in cui avviene il trasferimento di un file dal server al client. Mandando server e client in esecuzione mi da un errore del tipo:

Errore di IO java.net.SocketException: Socket is closed

Inoltre il file me lo ritrovo sul disco ma non si visualizza bene(è una foto).

STRALCIO CLIENT:

System.out.println( "Ricezione file in corso..." );

BufferedInputStream in = new BufferedInputStream (socket.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream( "c:\\f.jpg" ));

byte buffer[] = new byte[1024];



while( in.read(buffer,0,buffer.length)!= -1 ) {
out.write( buffer,0,buffer.length );

}

// Cleanup
out.flush();
out.close();
in.close();
socket.close();

System.out.println( "Ricezione completata!" );}

STRALCIO SERVER:
// Run method
public void run() {
try {
// Create a server on the specified port
ServerSocket server = new ServerSocket(port,max_client_number);

// Infinite loop
while(true) {
// Wait for a connection
Socket s=server.accept();
System.out.println("Accepted connection from client...");


while(true) {


//Stream x l'invio del file

BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream());
BufferedInputStream in = new BufferedInputStream (new FileInputStream( "c:\\inverno.jpg" ));


byte buffer[] = new byte[1024];


System.out.println( "Invio file in corso..." );



while( (in.read(buffer,0,buffer.length)!=-1)) {

out.write( buffer,0,buffer.length );

}

//Close client socket e start waiting once again
s.close();
System.out.println( "Invio completato." );


}// fine while

}
} catch(IOException ioe){
System.out.println("Errore di IO "+ioe);
}// fine try/catch
}// fine run

GRAZIE ANTICIPATAMENTE
SALUTI