Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1

    [JAVA] Problema File Transfert con Socket e JFileChooser

    Ciao a tutti.
    Sto cercando di progettare un applicazione in Java che mi permetta il trasferimento
    tramite socket di un file tramite due classi Client e Server.
    Il server sceglierà quale file mettere in condivisione e una volta selezionato il file con una swing (JFileChooser) si metterà in attesa del client.
    Fino alla parte server non ci sono problemi. La swing funziona bene e mi fa selezionare il file. Qui andrò a salvare il percorso del file in una String per poterlo passare la client che dovrà sapere il percorso del file da ricevere.
    Il problema arriva nel momento in cui faccio partire il client che sembra non ricevere alcun parametro e mi richiede il percorso del file e se gli ridò lo stesso file mi si blocca con una serie di errori.
    Qualcuno saprebbe dirmi quale può essere il poblema ??!?!?!
    Ci sto sbattendo al testa da un po' oramai
    Grazie.
    Di seguito vi posto il codice delle due classi Client e Server per maggior chiarezza.
    Ultima modifica di sanchez88; 12-05-2014 a 12:09

  2. #2
    codice:
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import javax.swing.JFileChooser;
    
    
    public class Server_Progetto {
        
        ServerSocket serverSocket;
        Socket socket;
        
        // Questa è la funziona principale della classe server. 
        // Verrà richiamate nella main
        public Server_Progetto() throws IOException {
            // impostiamo la porta di comunicazione
            int porta = 9876;
            JFileChooser fileChooser = new JFileChooser();
            int n = fileChooser.showOpenDialog(null);
            File file = fileChooser.getSelectedFile(); 
            String directory = file.getAbsolutePath();
              
            System.out.println(directory);
    
            socket = connessione(porta);
            // Qui invio la directory del file da andare a prelevare
            invia_File(directory);
            
        }
        
        // Qui creo la funziona per la connessione al client
        public Socket connessione(int porta) {
            Socket sock = null;
            try{
                serverSocket = new ServerSocket(9876);
                System.out.println("*** Attendo un client ***");
                sock = serverSocket.accept();
                }catch(UnknownHostException e) {
                e.printStackTrace();
                }catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("*** Connessione riuscita con successo ***");
            return sock;
        }
        
        // Inviamo la posizione del file
        public void invia_Parametri(String percorso, ObjectOutputStream oos){
            try {
                oos.flush();
                oos.writeObject(percorso);
                } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        // Adesso andremo a creare la funzione per l'invio del file. Tale funzione
        // spacchetta il file in blocchi di 1024 byte e li invia al client
        public void invia_File(String directory) throws  IOException
        {
            System.out.println("* Inizio processo di invio del file");
            String percorso = directory;
            FileInputStream fis = null;
            ObjectOutputStream oos;
            try{
                fis = new FileInputStream(percorso);
                oos = new ObjectOutputStream(socket.getOutputStream());
                 byte[] buf = new byte[1024];
                int read,tot=0;
                // invio i dati del file al client
                invia_Parametri(percorso, oos);
                System.out.println("*** Inviati: ***");
                oos.flush();
                oos.flush();
                while ((read = fis.read(buf)) != -1 ) {
                    tot += read;
                    System.out.println("  - "+tot+ " byte");
                    oos.write(buf, 0, read);
                    oos.flush();
                }
                System.out.println("*** File inviato con successo ***");
                } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        } 
    public static void main(String Args[]) throws IOException
        {
            new Server_Progetto();
        }
       
    } // Fine Server_Progetto
    Ultima modifica di LeleFT; 12-05-2014 a 16:23 Motivo: Aggiunti i tag CODE

  3. #3
    codice:
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    public class Client_Progetto
    {
        Socket s;
        
        public Client_Progetto() throws IOException
        {
            String indirizzoIP = "192.168.1.233";
            int porta = 9876;
            String destinazione = "C:\\prova\\";
            // mi connetto al server
            boolean connected = connect(indirizzoIP,porta);
            if (connected == false)
            {
                System.out.println("Non esiste alcun server sulla porta " + porta);
                System.exit(0);
            }
            // avvio la ricezione del file
            ricevi_File(destinazione);
        }
        
        // funzione per connettermi al server
        public boolean connect(String ip,int port)
        {
            boolean result = false;
            try {
                s = new Socket(ip,port);
                result = true;
                System.out.println("* connesso con successo");
                } catch (UnknownHostException e) {
                e.printStackTrace();
                } catch (IOException e) {
                e.printStackTrace();
            }
            return result;
        }
        public String[] ricevi_parametri(ObjectInputStream ois)
        {
            String parametri_file[] = null;
            try {
                String param = (String)ois.readObject();
                parametri_file = param.split(",");
                } catch (IOException e) {
                e.printStackTrace();
                } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            return parametri_file;
        }
        public void ricevi_File(String dest) throws IOException
        {
            System.out.println("* Inizio processo di ricezione");
            String destinazione = dest;
            int read = 0;
            int tot = 0;
            ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
            String [] param_file = ricevi_parametri(ois);
            String nome = param_file[0];
            int dimensione = Integer.parseInt(param_file[1]);
            // stream per il salvataggio del file su disco
            File file = new File(destinazione+nome);
            // apro outputStream
            FileOutputStream fos = new FileOutputStream(file, true);
            byte[] buf = new byte[1024];
            System.out.println("* Ricevo: ");
            // prendo il pacchetto di 1024 kb
            try{
                while ((read = ois.read(buf)) != -1) {
                    tot += read;
                    System.out.println("  - "+tot+ " byte");
                    // scrivo il pacchetto su disco
                    fos.write(buf, 0, read);
                }
            }catch(java.net.SocketException e)
            {
                //if (tot == dimensione)
                //{
                    System.out.println("** File ricevuto con successo");
                //}
                //else
                //{
                 //   System.out.println("$$ ERRORE - c''è stato qualche problema!");
                //}
            }
        }
        public static void main(String Args[]) throws IOException
        {
            new Client_Progetto();
        }
    }
    Ultima modifica di LeleFT; 12-05-2014 a 16:23 Motivo: Aggiunti i tag CODE

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ho segnalato la discussione attendi il transfert (qui siamo su javascript)
    Ciao.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da sanchez88 Visualizza il messaggio
    Qualcuno saprebbe dirmi quale può essere il poblema ??!?!?!
    Beh, io di cose "dubbie" comunque ne vedo svariate ..... forse dovresti concentrarti prima su queste.

    Innanzitutto nel server fai:

    String directory = file.getAbsolutePath();

    questa non è una "directory" .... è il path assoluto del file, cioè completo con il nome del file.

    Comunque inviare al client un path assoluto è comunque una idea vaga/dubbia .... client e server possono essere macchine differenti e con file-system radicalmente diversi.

    Ad ogni modo, nel server invii un "path" e nel client prendi questo String e fai un split(",") .... non ne capisco molto il senso .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Ah hai ragione. Lo split mi è rimasto dal codice iniziale in cui passavo più parametri di un file che era sempre lo stesso e non veniva selezionato con in FileChooser.
    Prima infatti io al posto del file chooser scrivevo il percorso del file in n path_file, il nome e la dimensione.
    // Dati del file di prova
    String path_file = "C:\\temp\\prova.txt";
    int dimensione_file = 481;
    String nome = "prova.txt";


    e li inviavo tutti con
    public void send_File(String path_file,String nome,int dimensione_file) throws IOException
    {
    .......}


    Scusami ma non ancora molto patico di Java

  7. #7
    Scusa. C'è un modo per prendere dal path del file solo il nome con l'estensione???

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da sanchez88 Visualizza il messaggio
    Scusa. C'è un modo per prendere dal path del file solo il nome con l'estensione???
    Sì, semplicemente getName() sul java.io.File.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Ah grazie mille. =D e io che cercavo i metodi più assurdi.
    Grazie di tutto intanto. Gentilissimo

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    @sanchez88: quando posti del codice, usa gli appositi tag CODE forniti dal forum, per mantenere formattazione ed indentazione e rendere, così, leggibile il codice.

    Uso dei tag code:

    [CODE]
    codice
    [/CODE]


    (in alternativa, clic sul pulsante giallo "Modalità avanzata" in basso a destra e usa l'apposito pulsante "#" fornito dalla palette di strumenti)


    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

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 © 2026 vBulletin Solutions, Inc. All rights reserved.