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:
e questo è il codice del Client.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"); } }
alla riga in neretto netbeans mi segnala l'errore sul server (che quindi è avvenuto nella riga precedente) Software caused connection abort: socket write errorcodice: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"); } }
mentre il server poi trova l'errore di socket chiuso
Dove commetto l'errore?
Grazie a tutti per l'aiuto

Rispondi quotando