Oppure

Loading
08/05/09 19:50
mutelg
Salve ho un diavolo di problema da quasi due settimane e non ne riesco a venire a capo, sto sviluppando un piccolo server di controllo remoto e tra i vari comandi, c'è l'uppload e il download di file, tutto liscio se non fose che questi benedetti file arrivamo con gli ultimi byte mozzati, ho testato il programma con un file di testo con righe numerate e mancano all'incirca le ultime 300 righe. Se lo faccio in locale funziona a meraviglia inviando 100 byte per volta, se lo provo in LAN o su internet succede quello che vi ho detto prima. Vi prego siete la mia ultima speranza dopo di che mi UCCIDO. Posto la parte di codice interessata:

Lato Client:
     dalServer = new BufferedReader(new InputStreamReader(conn.getInputStream()));
           String nomeF = dalServer.readLine();
           int grandezzaF = Integer.parseInt(dalServer.readLine());
           int buff = grandezzaF / 10000;
           byte buffer[] = new byte[HTTP.pacchetto];
           streamI = new DataInputStream(conn.getInputStream());
           //cerco o creo il punto dove salvare il file ricevuto
           File dir = new File("C:\ricevuti\");
           if(!dir.exists())
               if(dir.mkdir())
                   System.out.println("Cartella ricevuti creata!");
               else
                   System.out.println("Cartella ricevuti non è stato possibile crearla!");
           File file = new File("c:\ricevuti\"+nomeF);
           scriviFile = new FileOutputStream(file);
           JOptionPane.showMessageDialog(null,"Trasferimento file in corso!");
           int y=0;
           for(int i=0; i<grandezzaF/HTTP.pacchetto;i++)
           {
            //si tratta di un help graficp per farmi rendere conto di a
            // che punto si trova con la ricezione del file
            if(y>buff-1)
            {
             System.out.print("|");
             y=0;
            }
            //leggo il file in un buffer
            streamI.read(buffer);
            //scrivo il buffer sul file
            scriviFile.write(buffer);
            y++;
           }
           //leggo e scrivo l'ultimo buffer che molto probabilmente
           //non è di 100 byte e quindi lavoro con la rimanenza
           streamI.read(buffer, 0, (int)grandezzaF%HTTP.pacchetto);
           scriviFile.write(buffer, 0, (int)grandezzaF%HTTP.pacchetto-1);
           
           JOptionPane.showMessageDialog(null,"Trasferimento file Completato!");
           //chiudo file, connessione e stream
           streamI.close();
           scriviFile.close();
           conn.close();


Lato Server:
 alClient = new PrintStream(conn.getOutputStream());
        streamO = new DataOutputStream(conn.getOutputStream());
        FileI = new FileInputStream(percorso+nomeF);
        //cerco o creo un punto dove memorizzare i file inviati
        File dir = new File("C:\inviati\");
        if(!dir.exists())
            if(dir.mkdir())
                System.out.println("Cartella inviati creata!");
            else
                System.out.println("Cartella inviati non è stato possibile crearla!");
        File file = new File("c:\inviati\"+nomeF);
        FileOutputStream scriviFile = new FileOutputStream(file);
        byte buffer[] = new byte [HTTP.pacchetto];
        alClient.println(nomeF);
        int grandezzaF = FileI.available()+1;
        alClient.println(grandezzaF);
        JOptionPane.showMessageDialog(null,"Invio in corso!");
        //invio il file
        for(int i=0;i<grandezzaF/HTTP.pacchetto; i++)
        {
         //leggo il file in un buffer
         FileI.read(buffer);
         //scrivo il buffer in un file per memorizzare ciò che invio
         scriviFile.write(buffer);
         //invio il buffer tramite stream
         streamO.write(buffer);
        }
        //leggo ed invio l'ultimo pacchetto di dati
        FileI.read(buffer, 0, (int)grandezzaF%HTTP.pacchetto);
        scriviFile.write(buffer, 0, (int)grandezzaF%HTTP.pacchetto-1);
        streamO.write(buffer, 0, (int)grandezzaF%HTTP.pacchetto-1);

        JOptionPane.showMessageDialog(null,"File inviato con successo!");   
        //chiudo stream, FIle e connessione     
        streamO.close();
        FileI.close();
        conn.close();
Ultima modifica effettuata da mutelg 08/05/09 20:06
aaa