Ciao a tutti!!!
Ho un problema paradossale, per fare un programma sto utilizzando parte di codice di un programma che ho fatto l'anno scorso (funzionante) ma il problema è che per "magia" non va più.
Devo inviare semplicemente un file da client a server e viceversa.
Per comodità (più corto e tutto in un file) vi incollo il codice di un programmino fatto dal mio prof, che ho utilizzato l'anno scorso (ho utilizzato le sue classi sendFile e getFile).
PARTE SERVER
PARTE CLIENTcodice:import java.io.*; import java.net.*; import java.util.*; import javax.swing.*; import java.io.ObjectOutputStream; public class MediaServer { private static ServerSocket serverSocket; private static final int PORT = 7777; public static void main(String[] args) { System.out.println(">>> Pronto al servizio <<<\n"); try { serverSocket = new ServerSocket(PORT); } catch(IOException ioEx) { System.out.println(">>> Impossibile agganciare la porta! <<<"); System.exit(1); } do { try { Socket link = serverSocket.accept(); System.out.println("Accepted connection : " + link); Scanner inStream = new Scanner(link.getInputStream()); // crea un oggetto scanner e lo associa allo stream di input del socket connesso al client ObjectOutputStream outStream = new ObjectOutputStream(link.getOutputStream()); // crea un oggetto ObjectOutputStream associato all'oggetto Socket String message = inStream.nextLine(); // acquisisce il messaggio if (message.equals("IMAGE")) // chiama metodo sendFile a seconda del tipo di file passando nome file e oggetto ObjectOutputStream sendFile("./DATABASE/immagine.jpg", outStream); if (message.equals("SOUND")) sendFile("./DATABASE/canzone.mp3", outStream); } catch(IOException ioEx) // cattura eccezioni IO { ioEx.printStackTrace(); } }while (true); } private static void sendFile(String fileName, ObjectOutputStream outStream) throws IOException { FileInputStream fileIn = new FileInputStream(fileName); // crea un oggetto FileInputStream passandogli il nome del file nel costruttore long fileLen = (new File(fileName)).length(); // crea un oggetto File anonimo (non verra' piu' usato dal nome del file e usa metodo length per determinarne la lunghezza int intFileLen = (int)fileLen; // converte log a int e dichiara un array di byte di questa lunghezza byte[] byteArray = new byte[intFileLen]; fileIn.read(byteArray); // usa metodo read di FileInputStream per leggere il contenuto del FileInputStream nello array di byte fileIn.close(); // chiude alla fine outStream.writeObject(byteArray); // utilizza oggetto ObjectOutputStream per spedire array di byte al client outStream.flush(); } }
L'anno scorso funzionava alla perfezione, quest'anno il server mi da quest'errore (esempio SOUND)codice:import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.io.ObjectOutputStream; public class MediaClient { private static InetAddress host; private static final int PORT = 7777; public static void main(String[] args) { try { host = InetAddress.getLocalHost(); } catch(UnknownHostException uhEx) { System.out.println(">>> Non trovato host ID! <<<"); System.exit(1); } try { Socket link = new Socket(host,PORT); // crea oggetti ObjectInputStream e PrintWriter associandoli al socket ObjectInputStream inStream = new ObjectInputStream( link.getInputStream()); PrintWriter outStream = new PrintWriter( link.getOutputStream(),true); // definisce stream per ingresso da tastiera Scanner userEntry = new Scanner(System.in); System.out.print(">>> Richiesta (IMAGE/SOUND): "); String message = userEntry.nextLine(); while(!message.equals("IMAGE") && !message.equals("SOUND")) { System.out.println("\n>>> Riprovaci! <<<\n"); System.out.print(">>> Richiesta (IMAGE/SOUND): "); message = userEntry.nextLine(); } // utilizza oggetto PrintWriter per mandare la richiesta al server outStream.println(message); // riceve il file getFile(inStream, message); link.close(); } catch(IOException ioEx) { ioEx.printStackTrace(); } catch(ClassNotFoundException cnfEx) { cnfEx.printStackTrace(); } } private static void getFile(ObjectInputStream inStream, String fileType) throws IOException, ClassNotFoundException { // utilizza metodo readObject di ObjectInputStream per ricevere il file // dal server facendo un cast di tipo da Object a byte[] byte[] byteArray = (byte[])inStream.readObject(); // crea oggetto FileOutputStream per ricevere dati FileOutputStream mediaStream; // riceve dati a seconda del tipo di file passando il nome del file if (fileType.equals("IMAGE")) mediaStream = new FileOutputStream("./DOWNLOAD/image.jpg"); else mediaStream = new FileOutputStream("./DOWNLOAD/canzone.mp3"); // utilizza metodo write di FileOutputStream per riempire il file // con array di byte mediaStream.write(byteArray); } }
non riesco a capire il perchè, ho provato a cambiare i percorsi, a mettere "java.io.File.separator" sono disperato, aiutatemi !!!codice:Accepted connection : Socket[addr=/192.168.0.3,port=2360,localport=7778] java.io.FileNotFoundException: .\DATABASE\canzone.mp3 (Impossibile trovare il percorso specificato) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at MediaServer.sendFile(MediaServer.java:76) at MediaServer.main(MediaServer.java:57)
Grazie ;-)

Rispondi quotando