Ciao a tutti, è il mio primo post di richiesta d'aiuto su questo forum...ho la necessità di creare un server che riceve un file da client, lo elabora, e rimanda indietro il risultato. Ora, omettendo la parte dell'elaborazione, ho dei problemi a far viaggiare i file in entrambe le direzioni. Il problema suppongo sia dal lato server, che mi da errore di lettura dal socket.

In pratica il percorso Client->server funziona, il file viene trasferito e salvato correttamente. Al momento di far viaggiare un qualunque file "al contrario" cioè Server->Client mi da errore il Server.

Vi allego il codice del Server e del Client

Server:
codice:
import java.util.*;
import java.net.*;
import java.io.*;

public class Server {
    private static final int SERVER_PORT = 9977;
    private static final String SEND_DIR = "C:/k10.doc";
    private static final String SAVE_DIR = "C:/HelloWorld.class";
    private Socket socket;
        
    
    public static void main (String[] args) throws IOException{
        File file=null;
        Socket s =null;
        
        ServerSocket ss = new ServerSocket(SERVER_PORT);
        System.out.println("Sono sulla " + ss);

        s = ss.accept();
        System.out.println("Conessione da " + s);

        System.out.println("presa in carico nuova connessione da " + s);
        
        File inFile = null;
        try{
            ObjectInputStream oin = new ObjectInputStream(s.getInputStream());
            inFile = (File) oin.readObject();
            File saveFile = new File(SAVE_DIR);           
            save(inFile, saveFile);
        }
        catch (IOException e){
            e.printStackTrace();
        }
        catch (ClassNotFoundException e){
            e.printStackTrace();
        }
        
        System.out.println("File Ricevuto da Server");
        
        File file2=new File(SEND_DIR);
        ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
        oos.reset();
        oos.writeObject(file2);
        oos.flush();
        oos.close();
        
        System.out.println("File inviato da Server - Chiusura Socket");
        
        try {
            s.close();
        } 
        catch (IOException e) { 
            e.printStackTrace();
        }
    }
    
    public static void save(File in, File out) throws IOException {
        System.out.println(" --ricezione file " + in.getName());
        System.out.println(" --dimensione file " + in.length());
         FileInputStream fis  = new FileInputStream(in);
        FileOutputStream fos = new FileOutputStream(out);
 
        byte[] buf = new byte[1024];
        int i = 0;
        while((i=fis.read(buf))!=-1) {
              fos.write(buf, 0, i);
          }
          fis.close();
          fos.close();
 
          System.out.println(" --ricezione completata");
  }
}
e questo è il codice del Client.

codice:
import java.io.*;
import java.net.*;
import java.util.*;


public class Client {
    private static final String SERVER_HOST = "127.0.0.1";
    private static final int SERVER_PORT = 9977;
    private static final String SAVE_DIR = "C:/Result";
    private static final String SEND_DIR = "F:/HelloWorld.class"; 
    
    public static void main (String[] args){
        Socket socket = null;
        try {
            socket = new Socket(SERVER_HOST, SERVER_PORT);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        System.out.println("Client Connesso" + socket);
        
        File file2=new File(SEND_DIR);
        try{
        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
        oos.reset();
        oos.writeObject(file2);
        oos.flush();
        oos.close();
        }
        catch (IOException e){
            e.printStackTrace();
        }
        
        System.out.println("File Spedito da Client");
        
        File inFile = null;
        try{
            ObjectInputStream oin = new ObjectInputStream(socket.getInputStream());
            inFile = (File) oin.readObject();
            File saveFile = new File(SAVE_DIR + "/" + inFile.getName());           
            save(inFile, saveFile);

        }
        catch (IOException e){
            e.printStackTrace();
        }
        catch (ClassNotFoundException e){
            e.printStackTrace();
        }
        
        System.out.println("File Ricevuto da Client - Chiusura Socket");
        
        try {
            socket.close();
        } 
        catch (IOException e) { 
            e.printStackTrace();
        }
    }
    
    public static void save(File in, File out) throws IOException {
        System.out.println(" --ricezione file " + in.getName());
        System.out.println(" --dimensione file " + in.length());
        FileInputStream fis  = new FileInputStream(in);
        FileOutputStream fos = new FileOutputStream(out);
 
        byte[] buf = new byte[1024];
        int i = 0;
        while((i=fis.read(buf))!=-1) {
              fos.write(buf, 0, i);
          }
          fis.close();
          fos.close();
 
          System.out.println(" --ricezione completata");
  }
}
alla riga in neretto netbeans mi segnala l'errore sul server (che quindi è avvenuto nella riga precedente) Software caused connection abort: socket write error
mentre il server poi trova l'errore di socket chiuso

Dove commetto l'errore?

Grazie a tutti per l'aiuto