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