Newsgroup: it.comp.java
Titolo: scaricare una GIF

Ciao a tutti, stò realizzando un'applicazione server che effettua una get da HTTP di una GIF per conto del client. Visualizzando le dimensioni effettive della GIF ho scoperto che questa non viene scaricata completamente ma a metà (più o meno) infatti il file generato localmente risulta corrotto. Avete un'idea di quale possa essere il problema? 
Vi elenco la parte del programma in esame (premetto che ho verificato il corretto funzionamento di tutte le funzioni in cui cerco il nome dell'host, della porta e dell'indirizzo http dell'immagine):
File image=new File("image.gif");
String addressImage=""; 
public File HTTPClient3() throws IOException {
        Socket socket = null;
 
//memorizza in una variabile globale addressImage l'indirizzo della GIF
        findImage();
 
        dissectURL (addressImage);
        socket = connect ();
        try {
            getImage ();
        } finally {
          socket.close ();
        }
        return image;
 
    }
 protected Socket connect () throws IOException {
       // host e port sono variabili assegnate nel costruttore della classe
        System.err.println ("Connessione a " + host + ":" + port + "...");
        Socket socket = new Socket (host, port);
        System.err.println ("Connessione avvenuta.");
        BufferedOutputStream buffOut = new BufferedOutputStream (socket.getOutputStream ());
        out = new DataOutputStream (buffOut);
        in = new DataInputStream (socket.getInputStream ());
        return socket;
      }
public void getImage() throws IOException {
            System.out.println ("Richiesta del file " + file + " inviata...");
            out.writeBytes ("GET " + file + " HTTP/1.0\r\n\r\n");
            out.flush ();
 
            System.out.println ("Ricezione dati...");
            String input = null ;
             // image è il nome del file che viene definito da una variabile globale
            FileOutputStream fos3=new FileOutputStream(image);
            PrintStream ps3=new PrintStream(fos3);
 
             // Serve per saltare le prime righe che la pagina HTTP mi mette come header
            for (int i=0;i<5;i++){
                input=in.readLine();
                System.out.println(input);
            }
             // Inizia l'immagine GIF, quando termina il file esce, altrimenti lo salva nel file
            while (in.read()!=-1){
                input=in.readLine();
                System.out.println (input);
                ps3.println(input);            
            }
        System.out.println("FINE LETTURA");
    }
Ciao e grazie a tutti per l'aiuto
-- 
marco82 
------------------------------------------------------------------------
View this thread: 
http://www.itsistemi.net/viewtopic-846748.html
Inviato via 
http://www.itsistemi.net

marco82 ha scritto:

Ma un'immagine non è un file binario?

sì in effetti è un file binario, ho provato anche a leggere/scrivere i byte ma non funziona lo stesso. Ho trovato anche ad usare le java.awt.image, in particolare:
Image mappaGIF = Toolkit.getDefaultToolkit().getImage( new java.net.URL( "
http://localhost/test.gif
") );
ma non funziona comunque, visto che andando a vedere le proprietà di mappaGIF ottengo altezza e larghezza pari a -1


 ma non funziona comunque, visto che andando a vedere le proprietà di mappaGIF ottengo altezza e larghezza pari a -1
Prova ad aspettare ^^
Cioe', dagli il tempo per il caricamento di rete e per il suo lavoro, 
per esempio mettendo una sleep di qualche millisecondo e vedi se dopo 
hai le dimensioni di altezza/larghezza corrette.
Saluti
CarMas