Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [JAVA] passare un file da un client ad un server

    devo fare una applicazione client-server in java.
    però ho un problema.
    al programma che fa il client passo come argomento il path del file che si trova sulla macchina client.
    questo path viene passato al server ma nel momento in cui il programma server cerca di esaminare il file passato dal client da errore in quanto non riesce ad individuare il path.
    questo probabilmente perchè il server va a cercare il file al proprio interno mentre in realtà dovrebbe leggerlo da client.

    Come faccio a gestire una cosa di questo tipo?

    come faccio a dire al server di leggere il file riferendosi al client?

    c'è qualche istruzione particolare da inserire nel path o da utilizzare nel programma che gestisce il server?

    in altre parole vorrei sapere come è possibile passare un file da un client ad un server in modo che il server esamini le informazioni riportate nel file che risiede nel client.
    Luca >> http://www.pollosky.it

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Per inviare un file al server (o al client, non c'è differenza) devi semplicemente spedirlo byte per byte. Puoi inviare pacchetti di byte, se vuoi rendere più performante la cosa o, addirittura, inviare un solo pacchetto contenente tutto il file. Quello che non ha senso fare è inviare il path del file nel client: il server non saprà che farsene, dato che non ha accesso alle risorse del client.

    Un'altra soluzione prevede l'invio di un URL: ovvero, passi al server l'URL del file nel client, ma questa soluzione non ha molto senso... il client difficilmente farà accedere il server nel proprio hard disk.

    Quindi devi prevedere un protocollo tuo di trasmissione. Un esempio potrebbe essere il seguente:
    codice:
    public class Messaggio {
       private byte [] dati;
    
       public Messaggio(byte [] dati) { this.dati = dati; }
    
       public byte[] getDati() { return dati; }
    }
    Con questa semplicissima classe puoi trasmettere un intero file dal client al server. Vediamo come fa il client:
    codice:
    public class Client {
       ...
    
       private void inviaFile(File f) throws Exception {
          FileInputStream fis = new FileInputStream( f );
          byte [] datiFile = new byte[fis.available()];
          fis.read(datiFile);
          Messaggio msg = new Messaggio(datiFile);
          inviaAlServer( msg );
       }
    }
    Dall'altro capo, il server leggerà in questo modo:
    codice:
    public class Server  {
       ...
    
       private void riceviMessaggio() {
          try {
             // ois è nu oggetto di tipo ObjectInputStream
             // costruito con l'InputStream della Socket
             Messagio msg = (Messaggio) ois.readObject();
             recuperaFile( msg );
          } catch (Exception e) { e.printStackTace(); }
       }
    
       private void recuperaFile(Messaggio msg) {
          byte [] datiFile = msg.getDati();
          // Ora nell'array datiFile il server ha tutti i byte
          // che compongono il file... può fare ciò che vuole.
       }
    }
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.