ho provato anche così...
adesso non si blocca dopo il primo file...(i file sono 3: doc1.txt, doc2.txt, doc3.txt).
però il client riceve solo il primo file (doc1.txt), e dentro scrive i nomi degli altri file....
ma come può succedere una cosa del genere..
ci sto impazzendo..
sarà sicuramente una cavolata, e non riesco a capirlo.
aiutoo ragazzi
SERVER:
codice:
import java.io.*;
import java.net.*;
public class Server_monitor_1 extends Thread
{
private ServerSocket Server_monitor;
public static void main( String arg[] ) throws Exception
{
new Server_monitor_1();
}
public Server_monitor_1() throws Exception
{
Server_monitor = new ServerSocket(50001);
System.out.println("Il Server è in attesa sulla porta 50001.");
this.start();
}
public void run()
{
while(true)
{
try
{
System.out.println("In attesa di Connessione.");
Socket client = Server_monitor.accept();
System.out.println("Connessione accettata da: "+
client.getInetAddress());
@SuppressWarnings("unused")
Connect c = new Connect(client);
}
catch(Exception e) {}
}
}
}
class Connect extends Thread
{
private Socket client = null;
BufferedReader in = null;
PrintStream out = null;
public Connect() {}
public Connect(Socket clientSocket)
{
client = clientSocket;
try
{
in = new BufferedReader(
new InputStreamReader(client.getInputStream()));
out = new PrintStream(client.getOutputStream(), true);
}
catch(Exception e1)
{
try { client.close(); }
catch(Exception e) { System.out.println(e.getMessage());}
return;
}
this.start();
}
public void run()
{
try
{
String path_dir = "path della cartella dei file";
//devo scannerizzare tutta la cartella e ad uno ad uno inviare tutti i file
File dir = new File(path_dir);
File elenco_file[] = dir.listFiles();
sendFile(elenco_file, client);
}
catch( IOException e )
{
System.out.println( "Si è verificato un errore!" );
e.printStackTrace();
}
}
private static void sendFile(File[] elenco, Socket clientSocket) throws IOException
{
Socket s=clientSocket;
// Comunica al client il numero di file che invierò
int numeroFile = elenco.length;
sendClient(numeroFile, s);
// Ora invia ciascun file, uno per volta:
for(int i=0; i<elenco.length; i++)
{
BufferedInputStream in = new BufferedInputStream(new FileInputStream(elenco[i]));
BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream());
// Comunica al client la dimensione del file che verrà inviato ed il nome del file
sendClient(in.available(), elenco[i], s);
// Invia il file a blocchi di 4096 byte (4 KB)
byte[] dati = new byte[4096];
System.out.println( "Invio file in corso..." );
int letti;
while( ( letti = in.read( dati ) ) != -1 )
{
try
{
out.write( dati , 0 , letti );
}
catch( IOException e )
{
e.printStackTrace();
}
}
System.out.println( "Invio file terminato" );
}
}
CLIENT:
codice:
public void ricevi_file(int server_id, String ip_address, int porta_server) throws IOException
{
Socket s = new Socket(ip_address, porta_server);
System.out.println( "Ricezione file in corso dal server "+server_id+"..." );
// Leggo dal server il numero di file che riceverò
int numFiles = receiveFromServer("nFile", s);
System.out.println("IL CLIENT DEVE RICEVERE "+numFiles+" FILE");
// Ora ricevo ciascun file
for(int i=0; i<numFiles; i++)
{
// Ricevo dal server la dimensione del file
int dimFile = receiveFromServer("dimFile", s);
System.out.println("DIM FILE RICEVUTO: "+dimFile);
BufferedInputStream in = new BufferedInputStream(s.getInputStream());;
DataInputStream dataIn = new DataInputStream(s.getInputStream());
String fileReceived = dataIn.readUTF();
System.out.println("NOME FILE RICEVUTO: "+fileReceived);
FileOutputStream fos = new FileOutputStream( new File("D:\\fileRicevuti\\"+fileReceived));
// Ricevo, a pacchetti di 4096 byte (4 KB), tutto il file
byte[] dati = new byte[4096];
int letti;
while( ( letti = in.read( dati ) ) != -1 )
{
try
{
fos.write( dati , 0 , letti );
}
catch( IOException e )
{
e.printStackTrace();
}
}
fos.close();
in.close();
System.out.println( "Ricezione completata dal server "+server_id+"!" );
}
}