Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446

    [java]Creazione server per scambio di files

    Salve a tutti,stò creando un'applicazione per l'invio e la ricezione di files,questo è il codice:

    import java.io.*;
    import java.net.*;

    public class FileReceiver {
    public static void main( String arg[] ) throws IOException
    {
    System.out.println( "Server in ascolto..." );
    ServerSocket ss = new ServerSocket( 60000 );
    Socket s = ss.accept();

    System.out.println( "Ricezione file in corso..." );
    InputStream in = s.getInputStream();
    FileOutputStream out = new FileOutputStream( "c:\\nomefile.ext" );
    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();
    ss.close();

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

    ora,il mio problema è questo,l'invio e la ricezione funzionano perfettamente ma come faccio a modificare il codice di questo ricevitore in modo tale che riceva il vero nome e l'estensione del file ricevuto?al momento lo salva con nomefile.ext....aiuti?
    Grazie mille!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Le domande relative al linguaggio Java vanno ora inserite nell'apposito forum dedicato.
    Sposto la discussione.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446
    grazie scusami nn mi ero accorto di tale modifica !

  4. #4
    Puoi fare così, invii al server il nome del file, che puoi ottenere dal client, la sua dimensione e successivamente inviare il file. Niente di più semplice. Per distinguere quando una parte è finita, puoi utilizzatore un carattere speciale o una serie di caratteri, in modo da capire cosa sta ricevendo il server. Oppure puoi aprire più canali.
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  5. #5
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446
    qual'è la sintassi del comando?
    getFileName o qualcosa di simile?

    Questo è il client:

    import java.io.*;
    import java.net.*;
    import javax.swing.*;

    public class FileSender {
    public static void main( String arg[] )
    {
    JFileChooser fc = new JFileChooser();
    if( fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION ) {
    File tmp = fc.getSelectedFile();
    if( JOptionPane.showConfirmDialog(null,"Confermare l'invio del file:\n" + tmp.getName(),"FileSender",JOptionPane.YES_NO_OPTI ON) == JOptionPane.YES_OPTION ) {
    try {
    sendFile( tmp );
    } catch( IOException e ) {
    System.out.println( "Si è verificato un errore!" );
    }
    }
    }

    System.exit(0);
    }

    private static void sendFile( File f ) throws IOException
    {
    System.out.println( "Connessione..." );
    Socket s = new Socket( "localhost" , 60000 );

    OutputStream out = s.getOutputStream();
    FileInputStream in = 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]" );
    }
    }

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Un altro modo consiste nel fare un primo invio solo del nome del file, mentre nei successivi invii degli oggetti Java serializzati che contengono un array di byte con i dati del file. Ovviamente, questa via è da utilizzarsi quando si desidera creare dei "pacchetti" con una dimensione massima per non intasare la rete (dato che sarebbe possibile, in questo modo, inviare tutto il file in un blocco unico).
    Alla fine invii un "pacchetto speciale" in cui indichi che la trasmissione del file è terminata.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di energie
    Registrato dal
    Apr 2003
    Messaggi
    446
    Domanda: avete qualche link o qualche sorgente da mandare su cui potrei studiare come creare applicazioni client/server che permettano il trasferimento di un file ma con la possibilità di continuare un file incompleto?E magari in cui viene anche spiegato come imporre dei limiti riguardo la dimensione e l'estensione di un file?
    grazie mille a chi mi risponde

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.