Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    1

    [JAVA]trasferirefile

    Buonasera. Di seguito riporto una parte di codice di una classe client e una di una classe server, in cui avviene il trasferimento di un file dal server al client. Mandando server e client in esecuzione mi da un errore del tipo:

    Errore di IO java.net.SocketException: Socket is closed

    Inoltre il file me lo ritrovo sul disco ma non si visualizza bene(è una foto).

    STRALCIO CLIENT:

    System.out.println( "Ricezione file in corso..." );

    BufferedInputStream in = new BufferedInputStream (socket.getInputStream());
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream( "c:\\f.jpg" ));

    byte buffer[] = new byte[1024];



    while( in.read(buffer,0,buffer.length)!= -1 ) {
    out.write( buffer,0,buffer.length );

    }

    // Cleanup
    out.flush();
    out.close();
    in.close();
    socket.close();

    System.out.println( "Ricezione completata!" );}

    STRALCIO SERVER:
    // Run method
    public void run() {
    try {
    // Create a server on the specified port
    ServerSocket server = new ServerSocket(port,max_client_number);

    // Infinite loop
    while(true) {
    // Wait for a connection
    Socket s=server.accept();
    System.out.println("Accepted connection from client...");


    while(true) {


    //Stream x l'invio del file

    BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream());
    BufferedInputStream in = new BufferedInputStream (new FileInputStream( "c:\\inverno.jpg" ));


    byte buffer[] = new byte[1024];


    System.out.println( "Invio file in corso..." );



    while( (in.read(buffer,0,buffer.length)!=-1)) {

    out.write( buffer,0,buffer.length );

    }

    //Close client socket e start waiting once again
    s.close();
    System.out.println( "Invio completato." );


    }// fine while

    }
    } catch(IOException ioe){
    System.out.println("Errore di IO "+ioe);
    }// fine try/catch
    }// fine run

    GRAZIE ANTICIPATAMENTE
    SALUTI

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Il perchè credo sia dovuto al fatto che tu scrivi sempre e comunque 1024 byte di dati ad ogni lettura, mentre dovresti scrivere solo quelli effettivamente letti.
    Per far questo, dovresti tener conto del valore restituito dal metodo read() che indica esattamente il numero di byte letti e inviare questa informazione al ricevente (nel tuo caso il client, giusto?) in modo che anche lui sappia quanti byte deve effettivamente scrivere nel file.


    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 © 2025 vBulletin Solutions, Inc. All rights reserved.