Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    3

    InputStream e OutputStrem per il trasferimento di file

    Ciao a tutti, ringrazio infinitamente chiunque sappia aiutarmi.
    Ho sviluppato un programma che simula un middleware, diversi threah possono collegarsi ad esso con una lookup e scambiarsi messaggi.
    Message è un oggetto remoto con campi: mittente, destinatario ed extra_argument
    Chiamiamo Fornitore un thread che deve trasmettere un file (presente in una sua cartella locale) ad un altro thread cliente che lo richiede.

    Quindi il Fornitore eseguirà l'istruzione:

    codice:
    loadFile(nomeFile);
    Message msg=new Message(fornitore, destinatario, FILE);
    forniore.send(msg)
    con

    codice:
       public static void loadFile(String nomeFile){
            try {
                byte[] data;
                InputStream in=new FileInputStream(nomeFile);
                int byteAvailable= in.available();
                if(byteAvailable>0){
                    data= new byte[byteAvailable];
                    in.read(data);
                }
            } 
            catch (Exception ex) {   ex.printStackTrace(); }
        }
    e il Cliente deve ricevere il messaggio e salvare il file in una sua cartella locale

    codice:
    Message msg= cliente.receive();
    OutputStream out = new FileOutputStream(nomeFile);
    out.write(DATA );
    Non riesco proprio a farlo funzionare, le ho provate un pò tutte ma credo di non aver ben capito il funzionamento degli stream, quindi non posto altro codice e chiedo direttamente a voi qual'è la soluzione che credete migliore, vorrei capire
    COSA devo passare come parametro FILE e DATA.

    Ho bisogno di voiiiii!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    come fai parlare le diverse istanze? Cioè tu mandi un file, chi è il soggetto sorgente e chi è il soggetto destinazione?
    Se devi fare comunicare più elementi, devi comunque avere un CANALE di comunicazione tra i vari elementi e non ho capito quale è il tuo

    Potresti usare i tag code per il codice?
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    3
    Allora creo un oggetto ADSLImp, che è istanza di una classe che extende UnicastRemoteObject e implementa l'interfaccia remota ADSL

    ADSLImpl adsl=new ADSLImpl();
    adsl.startRMIRegistry(); // che fa il bind: Naming.rebind("rmi://"+ip+":"+port+"/"+name,this)
    adsl.startADSL(); // che fa la locate: LocateRegistry.createRegistry(port)


    poi creo il fornitore
    FornitoreAgent fornitore = new FornitoreAgent("eMule", "fornitore");
    fornitore.init();// che fa
    adsl = (ADSL)Naming.lookup("rmi://"+ip+":"+port+"/"+name);
    adsl.insertRemoteMessageBox(myMessageBox);
    dove myMessageBox implementa l'interfaccia remote ed è costituita da una lista di Message serializzabili

    e stessa cosa per il Cliente, quindi le MessageBoxes sono collegate all'ADSL e i thread "proprietari" delle Messaboxes si scambiano messaggi ottenendo dall'ADSL i riferimenti necessari.

    Sono riuscita a spiegarmi?

  4. #4
    Stai usando JavaRMI. Puoi creare un'interfaccia remota che viene implementata dal client che abbia il metodo "receive" così strutturato:

    codice:
    public void receive(Message aMessage)
    {
            byte[] inFile = aMessage.getFile() //metodo che restituisce il file
    	File saveFile = new File(""""PERCORSO\NOMEFILE.ESTENSIONE"""");
    	save(inFile, saveFile);
    	saveFile = null;
    }
    con
    codice:
    private static void save(byte[] inax, File out) throws IOException {
    	     OutputStream outs = new FileOutputStream(out);
    	     outs.write(inax);
    	     System.out.println(" --ricezione e salvataggio completato");
    	  }

    E da parte del fornitore


    codice:
     File aFile = loadFile(nomeFile);
     Message msg=new Message(fornitore, destinatario, aFile);
     cliente.receive(msg);


    Fammi sapere...

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.