Ho scritto del codice che mi permette di trasferire un file da un server ad un client, solo che nonostante il file arrivi sempre e correttamente a destinazione alcune volte me lo visualizza bene (è un JPG ma può essere qualunque cosa) ed altre non me lo visualizza proprio (File troppo grande o danneggiato).
Da che può dipendere? Vi scrivo il codice che ho implementato.
Lato Server
codice:public class ServerP2P { private ServerSocket server; private Socket connessione; private String nome; public ServerP2P (String nome) throws IOException { this.nome = nome; ServerSocket server = new ServerSocket (7778); System.out.println ("ServerSocket per il P2P avviato tramite Transfer Thread"); try { while(true) { connessione = server.accept (); P2PHandler c = new P2PHandler (connessione); c.start (); } } catch (Exception e ) { e.printStackTrace (); } } }Lato Clientcodice:public class P2PHandler extends Thread { private Socket s; private File f; private int dimension; private byte [] data; public P2PHandler (Socket s) throws IOException { this.s = s; } public void run () { try { f = new File ("Files\\Prova.jpg"); dimension = (int)f.length(); data = new byte [dimension]; while (true) { FileInputStream fis = new FileInputStream (f); DataOutputStream opt = new DataOutputStream (s.getOutputStream()); fis.read (data, 0, dimension); opt.write (data, 0, dimension); opt.close (); fis.close (); } } catch (IOException ex) { ex.printStackTrace (); } } }
codice:public class ClientP2P implements Runnable { private Socket connessione; private Thread listener; public ClientP2P (String indirizzo) { try { connessione = new Socket (InetAddress.getByName (indirizzo), 7778); } catch (ConnectException q) { System.out.println (Eccezione di tipo CONNECT !!!); } catch (NullPointerException w) { System.out.println ("Eccezione di tipo NULLPOINTER !!!"); } catch (IOException e) { System.out.println ("Eccezione di tipo IO !!!"); } listener = new Thread (this); listener.start (); } public void run () { try { FileOutputStream fos = new FileOutputStream ("FileRicevuto.jpg"); DataInputStream dis = new DataInputStream (connessione.getInputStream ()); byte b [] = new byte [1024]; while (dis.read (b) != -1) { fos.write (b); } dis.close (); fos.close (); connessione.close (); } catch (Exception e) { System.out.println (e); } } }

Rispondi quotando
