ok, almeno è un punto di partenza. Ho provato una soluzione del genere: l'errore però è sempre lo stesso, cioè s.getOutputStream
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:/mamma.class";
private static final String SAVE_DIR = "C:/HelloWorld.class";
private Socket socket;
public static void main (String[] args) throws Exception{
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);
System.out.println("Server accepts");
BufferedInputStream inn = new BufferedInputStream(s.getInputStream());
BufferedOutputStream ut = new BufferedOutputStream(new FileOutputStream(new File(SEND_DIR)));
byte[] buff = new byte[1024];
int readMe;
while( (readMe = inn.read(buff)) >= 0) {
ut.write(buff, 0, readMe);
}
inn.close();
ut.flush();
ut.close();
System.out.println("Server ha ricevuto il file");
BufferedInputStream fileIn = null;
BufferedOutputStream out = null;
file=new File(SEND_DIR);
fileIn = new BufferedInputStream(new FileInputStream(file));
out = new BufferedOutputStream(s.getOutputStream());
byte[] buffer = new byte[1024];
int numRead;
while( (numRead = fileIn.read(buffer)) >= 0) {
out.write(buffer, 0, numRead);
}
out.flush();
out.close();
fileIn.close();
System.out.println("Server ha inviato il file");
s.close();
}
}
Client
codice:
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/mamma.class";
private static final String SEND_DIR = "F:/HelloWorld.class";
public static void main (String[] args) throws Exception{
Socket socket = null;
File file=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);
BufferedInputStream fileIn = null;
BufferedOutputStream out = null;
file=new File(SEND_DIR);
fileIn = new BufferedInputStream(new FileInputStream(file));
out = new BufferedOutputStream(socket.getOutputStream());
byte[] buffer = new byte[1024];
int numRead;
while( (numRead = fileIn.read(buffer)) >= 0) {
out.write(buffer, 0, numRead);
}
out.flush();
out.close();
fileIn.close();
System.out.println("Client ha inviato il file");
BufferedInputStream inn = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream ut = new BufferedOutputStream(new FileOutputStream(new File(SAVE_DIR)));
byte[] buff = new byte[1024];
int readMe;
while( (readMe = inn.read(buff)) >= 0) {
ut.write(buff, 0, readMe);
}
inn.close();
ut.flush();
ut.close();
System.out.println("Client ha ricevuto il file");
socket.close();
}
}
a quanto pare nel momento in cui eseguo inn.close() sul server è come se si chiudesse il socket. Se "commento" quella riga infatti mi si creano entrembe i file ma ovviamente non mi si chiudono...come risolvo?