Questo è il thread con cui gestisco le operazioni del server
ps gurdate soltanto la prima funzione di ricezione richiesta ed ipotizzate che la prima richiesta sia files...codice:import java.io.*; import java.util.*; import java.net.*; public class ThreadServer extends Thread { byte[] BufferNomeFile, BufferListaFile; int IDClient,LunghezzaNomeFile; File CartellaCondivisa; InputStream Ingresso; OutputStream Uscita; FileInputStream LeggiFile; FileOutputStream ScriviFile; Server ServerAttivo; Socket SocketIngresso; String Indirizzo, Richiesta, NomeFile; public ThreadServer(Socket SocketIngresso, int IDSocket, String Indirizzo, Server ServerAttivo, File CartellaCondivisa) { this.SocketIngresso = SocketIngresso; this.IDClient = IDClient; this.Indirizzo = Indirizzo; this.ServerAttivo = ServerAttivo; this.CartellaCondivisa = CartellaCondivisa; } public void run() { try { while(true) { Ingresso = SocketIngresso.getInputStream(); Uscita = SocketIngresso.getOutputStream(); RiceviRichiesta(); if(Richiesta.equals("files")) { ServerAttivo.Scrivi("Richiesta files inoltrata da: "); ServerAttivo.Scrivi("\tClient " + IDClient + "@" + Indirizzo); InviaListaFile(); } else if(Richiesta.equals("download")) { InviaLunghezzaFile(); //InviaFile(); } else if(Richiesta.equals("upload")) { RiceviFile(); } else if(Richiesta.equals("disconnetti")) { break; } } stop(); } /*catch(InterruptedException e) { ServerAttivo.Scrivi("Client " + IDClient + "@" + Indirizzo + " disconnesso"); }*/ catch(Exception e) { ServerAttivo.Scrivi("Caduta connessione Client " + IDClient + "@" + Indirizzo); } } public String[] ListaFileServer() { File[] Files = CartellaCondivisa.listFiles(); int Contatore = 0; for(int i=0;i<Files.length;i++) { if(Files[i].isFile()) { Contatore++; } } String[] NomiFiles = new String[Contatore]; Contatore = -1; for(int i=0;i<Files.length;i++) { if(Files[i].isFile()) { Contatore++; NomiFiles[Contatore] = Files[i].getName(); } } return NomiFiles; } public void InviaListaFile() { try { ServerAttivo.Scrivi("Invio lista files a Client " + IDClient + "@" + Indirizzo); String[] ListaFile = ListaFileServer(); String Cartella = CartellaCondivisa.getName(); Uscita.write(ListaFile.length); BufferListaFile = new byte[CartellaCondivisa.getName().length()]; BufferListaFile = CartellaCondivisa.getName().getBytes("US-ASCII"); Uscita.write(CartellaCondivisa.getName().length()); Uscita.write(BufferListaFile); for(int i=0;i<ListaFile.length;i++) { BufferListaFile = new byte[ListaFile[i].length()]; BufferListaFile = ListaFile[i].getBytes("US-ASCII"); Uscita.write(ListaFile[i].length()); Uscita.write(BufferListaFile); } ServerAttivo.Scrivi("Lista file inviata a " + IDClient + "@" + Indirizzo); } catch(IOException e) { ServerAttivo.Scrivi("Errore nella spedizione della lista a " + IDClient + "@" + Indirizzo); } } public void RiceviFile() { ServerAttivo.Scrivi("Pronto a ricevere " + NomeFile); ServerAttivo.Scrivi("Inizio ricezione file..."); /*try { } catch(IOException e) { }*/ } public void RiceviRichiesta() { try { ServerAttivo.Scrivi("Ricezione richiesta"); LunghezzaNomeFile = Ingresso.read(); BufferNomeFile = new byte[LunghezzaNomeFile]; Ingresso.read(BufferNomeFile); Richiesta = new String(BufferNomeFile,"US-ASCII"); ServerAttivo.Scrivi("Richiesta: " + Richiesta); } catch(IOException e) { ServerAttivo.Scrivi("Connessione utente persa"); } } public void InviaLunghezzaFile() { try { RiceviRichiesta(); NomeFile = new String(BufferNomeFile,"US-ASCII"); File fileRichiesto = new File(CartellaCondivisa,NomeFile); byte LungFile = (byte)fileRichiesto.length(); Uscita.write(LungFile); } catch(IOException e) { ServerAttivo.Scrivi("Impossibile inviare lunghezza file selezionato"); } } }

Rispondi quotando