Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 26

Hybrid View

  1. #1
    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

  2. #2
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    @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:

    codice:
    codice

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


    Ciao.


    Grazie mille LeleFT =) ho ripostato correttamente adesso.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    @sanchez88: nel tuo codice aggiornato io comunque continuo a vedere che nel server invii 1 stringa con solo il path assoluto e nel client cerchi di spezzare con split ma non ottieni certo 2 parametri.

    Inoltre, anche se alla fine riuscirai ad inviare una stringa nel formato "nomefile,dimensione", sappi che questo modo di passare queste informazioni (oltretutto andando a "scomodare" la serializzazione degli oggetti solo per 1 String), risulta parecchio "maccheronico".
    Ultima modifica di andbin; 12-05-2014 a 18:07
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4

    Ho capito che intendi ma adesso allora sono in un vicolo cieco. =(
    Come posso fare? devo esportare solo il path e basta? cosi esporto una sola variabile e non ho bisogno di dividerle poi.
    Comunque la cosa strana è che esportando i valori assegnati fissi il programma funziona, appena aggiungo il filechooser mi da questo problema =(

  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
    Ho capito che intendi ma adesso allora sono in un vicolo cieco. =(
    Come posso fare? devo esportare solo il path e basta? cosi esporto una sola variabile e non ho bisogno di dividerle poi.
    Dal solo punto di vista del "protocollo" di comunicazione, cioè cosa/come/quando scambiare tra i due host, io ti suggerirei di usare le classi DataOutputStream e DataInputStream. Sono fatte apposta per scrivere/leggere stringhe e valori "primitivi" (int, long, ecc...) in un formato che è "standard" e noto solo tra queste due classi.

    La sequenza dei dati potrebbe essere la seguente:

    - una stringa con il solo nome base+estensione del file (nessun path): writeUTF di DataOutputStream e dall'altra parte readUTF di DataInputStream.
    poi
    - un long della dimensione del file: writeLong di DataOutputStream e dall'altra parte readLong di DataInputStream.
    poi
    - N byte con lo "stream" del file: i classici write e read a "blocchi" che hai già usato (ci sono in DataOutputStream/DataInputStream !).

    Se fai scritture e letture così "accoppiate" e speculari, non ci sono problemi.

    Se nel mittente alla fine chiudi la connessione, va anche bene che nel destinatario cicli finché ti aspetti end-of-file (-1). Ma in generale nel destinatario puoi anche fare in modo da ciclare aspettandoti esattamente quei N byte, dato che sapere la dimensione a priori generalmente è una buona cosa anche utile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Allora ho modificato il codice con le dritte che mi hai dato tu e ho fatto in modo di passare al client solo i parametri del file (path_file,nome,dimensione) però purtroppo all'avvio del client mi si presenta sempre lo stesso problema. Ovvero nonostante abbia già selezionato il file e abbia già passato i parametri mi ricompare la finestra di JFileChooser per riselezionare nuovamente il file. Non capisco perchè. Nella classe Client non richiamo mai questa funzione =(
    Risposto il codice aggiornato.

  7. #7
    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.2.27";
            int porta = 9876;
            String destinazione = "C:\\prova\\";
            // mi connetto al server
            boolean connesso = connect(indirizzoIP,porta);
            if (connesso == false)
            {
                System.out.println("*** ATTENZIONE: 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 porta)
        {
            boolean result = false;
            try {
                s = new Socket(ip,porta);
                result = true;
                System.out.println("*** CONNESSO CON SUCCESSO *** ");
                } catch (UnknownHostException e) {
                e.printStackTrace();
                } catch (IOException e) {
                e.printStackTrace();
            }
            return result;
        }
        public String[] acquisisci_parametri(ObjectInputStream ois)
        {
            String param_file[] = null;
            try {
                String param = (String)ois.readObject();
                param_file = param.split(",");
                } catch (IOException e) {
                e.printStackTrace();
                } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            return param_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 = acquisisci_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("*** ATENZIONE - c''è stato un problema!");
                }
            }
        }
        public static void main(String Args[]) throws IOException
        {
            new Client_Progetto();
        }
    }

  8. #8
    Grazie mille per tutto andbin.
    Adesso provo a seguire i tuoi consigli e vedo che riesco a tirarne fuori.

  9. #9
    Scusa andbin ma perchè dovrei passare solo il nome del file???
    Scusa ma quando lo passo non necessita anche del percorso in cui si trova?

  10. #10
    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
    quando lo passo non necessita anche del percorso in cui si trova?
    Cosa passare come nome dipende dai requisiti che ti sei imposto (o ti hanno imposto) e alla fin fine riguarda principalmente cosa vuoi che succeda nel destinatario del file.

    Il mittente e il destinatario sono generalmente macchine distinte (salvo casi di sviluppo/test, chiaramente). Se nella macchina "mittente" il file si trova es. in C:\PincoPalla\file.xyz, quindi sulla macchina "destinatario" cosa vuoi che succeda? Ti aspetti che quella directory debba esistere già? Vuoi che il tuo programma che riceve il file va a creare tutto il path dove/come necessario? O vuoi che sia chi usa il programma di ricezione a decidere dove mettere il file? Nella directory "corrente"? O altro?

    Ti è chiaro ora?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.