ciao ragazzi,
non vorrei approfittarne, ma siete molto bravi a risolvere i miei problemi, quindi...
vi chiedo di nuovo aiuto...
devo inviare dei file dal server al client.
sono riuscito ad inviare un singolo file, ma non riesco ad inviare più file...
vi posto adesso il codice del client e del server:
IL SERVER:
codice:import java.io.*; import java.net.*; public class Server_monitor_1 extends Thread { private ServerSocket Server_monitor; public static void main( String arg[] ) throws Exception { new Server_monitor_1(); } public Server_monitor_1() throws Exception { Server_monitor = new ServerSocket(50001); System.out.println("Il Server è in attesa sulla porta 50001."); this.start(); } public void run() { while(true) { try { System.out.println("In attesa di Connessione."); Socket client = Server_monitor.accept(); System.out.println("Connessione accettata da: "+ client.getInetAddress()); @SuppressWarnings("unused") Connect c = new Connect(client); } catch(Exception e) {} } } } class Connect extends Thread { private Socket client = null; BufferedReader in = null; PrintStream out = null; public Connect() {} public Connect(Socket clientSocket) { client = clientSocket; try { in = new BufferedReader( new InputStreamReader(client.getInputStream())); out = new PrintStream(client.getOutputStream(), true); } catch(Exception e1) { try { client.close(); } catch(Exception e) { System.out.println(e.getMessage());} return; } this.start(); } public void run() { try { String path_dir = "c:\\fileRicevuti\\"; //devo scannerizzare tutta la cartella e ad uno ad uno inviare tutti i file File dir = new File(path_dir); File elenco_file[] = dir.listFiles(); for(int i=0; i<elenco_file.length; i++) { //qui riesce a leggere il primo file, ma poi si ferma e non legge il secondo File file = new File(path_dir+elenco_file[i].getName()); System.out.println(file.getName()); sendFile(file, client); } } catch( IOException e ) { System.out.println( "Si è verificato un errore!" ); } } private static void sendFile(File f, Socket clientSocket) throws IOException { Socket s=clientSocket; BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream()); DataOutputStream dataOut = new DataOutputStream(s.getOutputStream()); dataOut.writeUTF(f.getName()); BufferedInputStream in = new BufferedInputStream(new FileInputStream(f)); byte buffer[] = new byte[4096]; long totale = 0L; System.out.println( "Invio file in corso..." ); while( true ) { try { int letti = in.read(buffer); if( letti>0 ) { out.write( buffer,0,letti ); totale += letti; } else { break; } } catch( IOException e ) { break; } } in.close(); out.flush(); out.close(); s.close(); System.out.println( "Invio file terminato [" + totale + " bytes inviati]" ); } }
IL CLIENT:
codice:import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.Socket; import gui.*; public class Client_monitor { public static void main(String[]args) { GUI myGui = new GUI(); myGui.setVisible(true); } public void ricevi_file(int server_id, String ip_address, int porta_server) throws IOException { Socket s = new Socket(ip_address, porta_server); System.out.println( "Ricezione file in corso dal server "+server_id+"..." ); BufferedInputStream in = new BufferedInputStream(s.getInputStream()); DataInputStream dataIn = new DataInputStream(s.getInputStream()); String fileReceived = dataIn.readUTF(); BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(new File(la cartella di destinazione + fileReceived); byte buffer[] = new byte[4096]; int letti; while( true ) { letti = in.read(buffer); if( letti>0 ) { out.write( buffer,0,letti ); } else { break; } } out.flush(); out.close(); in.close(); s.close(); System.out.println( "Ricezione completata dal server "+server_id+"!" ); } }
avvio il server normalmente, e parte.
poi faccio partire il client..parte, si collega al server, ma riceve soltanto il primo file della cartella del server (in realtà invece sono 3 file).
perchè ragazzi?
dove sbaglio?
forse non dovrei chiudere la socket (s.close), o qualcosa del genere?
aiutatemi per favore.
grazie

Rispondi quotando