Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    14

    Invio file multimediali client-server

    Ciao a tutti ragazzi, ho bisogno di creare un'applicazione client-server che mi permetta di inviare e ricevere file multimediali (immagini e audio) da server a client. Sono alle prime armi con java, so che devo utilizzare le classi ObjectOutputStream e ObjectInputStream ma non so come.
    Dopo aver impostato la soket e aver messo il server in ascolto non so come muovermi. Aiutatemi vi prego, grazie.

    P.S Anche qualche esempio di programmi simili, magari commentati sarebbero be accetti. grazie ancora

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Invio file multimediali client-server

    Originariamente inviato da cavo89
    so che devo utilizzare le classi ObjectOutputStream e ObjectInputStream
    Se vuoi sfruttare la "serializzazione" degli oggetti sì, altrimenti no ... non è detto.
    Dipende ... nel senso che bisogna vedere quale "protocollo" intendi usare, potresti anche non usare la "serializzazione" ma usare un "protocollo" di comunicazione binario che ti inventi tu.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    14
    la soluzione più semplice quale sarebbe? Cosa mi consigli? Io quel poco che so è sulla serializzazione quindi andrei su quella strada...ma se mi dici che ce n'è un'altra più semplice potrei pensarci su

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da cavo89
    Io quel poco che so è sulla serializzazione quindi andrei su quella strada...ma se mi dici che ce n'è un'altra più semplice potrei pensarci su
    La questione è che la "serializzazione" serve per gli oggetti. Se tu vuoi trasferire file ..... quali oggetti trasferisci??? Guarda che devi proprio aprire il file in locale, leggere e inviare sullo stream del socket tutti i byte del file.
    Ora.... cosa "serializzi"??? Puoi fare un mix e inviare un po' oggetti (es. per la descrizione del file) e un po' stream di byte "crudi" del file. Altrimenti puoi serializzare degli array di piccole dimensioni che contengono pezzetti del file.
    Insomma .... ti è chiara la questione?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    14
    mmmmm...devo inviare file immagine e file audio.
    Il procedimento che bisogna fare l'ho capito in linea teorica...ma in pratica non saprei come fare...

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    Questo è il codice che ho usato in un esercizio all'università... E' stato in gran parte copiato da un sito... magari può esserti di aiuto:

    server:
    codice:
    public class FileServer {
      public static void main (String [] args ) throws IOException {
       String desktopPath = System.getProperty("user.home") + "/Desktop";
       File myFile = new File(desktopPath+"/immagine.bmp");
        // create socket
        ServerSocket servsock = new ServerSocket(13267);
        while (true) {
          System.out.println("Waiting...");
    
          Socket sock = servsock.accept();
          System.out.println("Accepted connection : " + sock);
    
          // sendfile
          byte [] mybytearray  = new byte [(int)myFile.length()];
          FileInputStream fis = new FileInputStream(myFile);
          BufferedInputStream bis = new BufferedInputStream(fis);
          ObjectOutputStream os = new ObjectOutputStream(sock.getOutputStream());
          os.writeInt(mybytearray.length);
          bis.read(mybytearray,0,mybytearray.length);
          System.out.println("Sending...");
          os.write(mybytearray,0,mybytearray.length);
          os.flush();
          sock.close();
          }
        }
    }
    client:
    codice:
    public class FileClient{
      public static void main (String [] args ) throws IOException {
        long start = System.currentTimeMillis();
        int bytesRead;
        int current = 0;
        // localhost for testing
        Socket sock = new Socket("127.0.0.1",13267);
        System.out.println("Connecting...");
        // receive file
        ObjectInputStream is = new ObjectInputStream(sock.getInputStream());
        int dimension=is.readInt();
        byte [] mybytearray  = new byte [dimension];
        System.out.println("Dimensione="+dimension);
        FileOutputStream fos = new FileOutputStream("immagine.bmp");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        // thanks to A. Cádiz for the bug fix
        do {
           bytesRead =is.read(mybytearray, current, (mybytearray.length-current));
           current += bytesRead;
        } while(current<dimension);
        bos.write(mybytearray, 0 , current);
        bos.flush();
        long end = System.currentTimeMillis();
        System.out.println(end-start);
        bos.close();
        sock.close();
      }

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fr84
    codice:
          byte [] mybytearray  = new byte [(int)myFile.length()];
          FileInputStream fis = new FileInputStream(myFile);
          BufferedInputStream bis = new BufferedInputStream(fis);
          ObjectOutputStream os = new ObjectOutputStream(sock.getOutputStream());
          os.writeInt(mybytearray.length);
          bis.read(mybytearray,0,mybytearray.length);
          System.out.println("Sending...");
          os.write(mybytearray,0,mybytearray.length);
    Codice come questo, come al solito, è da prendere molto con le pinze.
    Innanzitutto viene istanziato un array della stessa identica dimensione del file!! E viene usato ObjectOutputStream, senza però sfruttare la "serializzazione" degli oggetti (quindi che serve ObjectOutputStream?). Idem l'altra parte opposta. E la gestione delle eccezioni lascia a desiderare ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    72
    Assolutamente d'accordo
    come ho detto era un esercizio assegnatomi dal prof di Java..
    Magari può essere utile come punto di partenza, ma nulla di più..
    Forse avrei dovuto specificarlo a scanso di equivoci

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.