Questa è la classe che gestisce le operazioni del client..

codice:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.net.*;
import javax.swing.*;
import javax.swing.event.*;

public class GestisciClient extends Thread
{
	Errore finErrore;
    Client client;
    String Indirizzo;
    int Porta,LunghezzaRichiesta;
    byte[] BufferListaFile,NomeFileBuffer;
    Socket socketServer;
    InputStream Ingresso;
    OutputStream Uscita;

    public GestisciClient(Client client,String Indirizzo,int Porta)
    {
        this.client = client;
        this.Indirizzo = Indirizzo;
        this.Porta = Porta;
    }
    
    public void run()
    {
        try
        {
            Connetti(Indirizzo,Porta);
            InviaRichiesta("files");
            RiceviFiles();
            
            while(!interrupted())
            {
            	
            }
        }
        catch(IOException e)
        {
            client.Scrivi("Impossibile connettersi al server");
        }
        
    }
    
    public void Connetti(String Indirizzo,int Porta) throws IOException
    {
    	if(Porta > 0 && Porta < 65536)
    	{
    		socketServer = new Socket(Indirizzo,Porta);
    		
    		client.Scrivi("Connesso al server " + Indirizzo + "@" + Porta);
    		
    		Ingresso = socketServer.getInputStream();
    		Uscita = socketServer.getOutputStream();
                
    		client.Scrivi("Componenti per la ricezione dati attivati!");
    	}
    	else
    	{
    		finErrore = new Errore(client,"Porta del server sbagliata");
    		finErrore.setVisible(true);
    	}
    }
    
    public void Disconnetti()
    {
    	try
    	{
    		socketServer.close();
    		interrupt();
    		stop();
    	}
    	catch(IOException e)
    	{
    		finErrore = new Errore(client,"Impossibile chiudere la connessione");
    		finErrore.setVisible(true);
    		
    		client.Scrivi("Errore nella chiusura della connessione");
    	}
    }
    
    public void InviaRichiesta(String Richiesta)
    {
    	try
    	{
    	    client.Scrivi("Invio richiesta file in corso");
    		LunghezzaRichiesta = Richiesta.length();
    		NomeFileBuffer = new byte[LunghezzaRichiesta];
    		NomeFileBuffer = Richiesta.getBytes("US-ASCII");
    		Uscita.write(LunghezzaRichiesta);
    		Uscita.write(NomeFileBuffer);
                Uscita.flush();
    		client.Scrivi("Richiesta inviata!");
    	}
    	catch(IOException e)
    	{
    		client.Scrivi("\nServer non attivo!");
    		Disconnetti();
    	}
    }
    
    public void RiceviFiles()
    {
    	int LunghezzaElemento,
    		Elementi;
    	
    	try
    	{   
    	    client.Scrivi("Ricezione lista");
    		Elementi = Ingresso.read(); 	
    		client.Scrivi(Integer.toString(Elementi));
    		client.DatiServer = new String[2][Elementi];
    		
    		LunghezzaElemento = Ingresso.read();
    		BufferListaFile = new byte[LunghezzaElemento];
    		client.Ingresso.read(BufferListaFile);
    	
    		client.DatiServer[0][0] = new String(BufferListaFile,"US-ASCII");
    	
    		client.Scrivi("Inizio trasferimento della lista");
    		if((Elementi) != 0)
    		{
    			for(int i=0;i<Elementi;i++)
    			{
    				LunghezzaElemento = Ingresso.read();
    				BufferListaFile = new byte[LunghezzaElemento];
    				Ingresso.read(BufferListaFile);
    				client.DatiServer[1][i] = new String(BufferListaFile,"US-ASCII");
    			}
    			client.Scrivi("Trasferimento lista completato!");
    		}
    		else
    		{
    			client.Scrivi("Nessun file da scaricare!!");
    			client.Scrivi("Prova a caricare dei file e riconnettiti!!");
    		}
    		
    		client.AlberoServer = new Hashtable();
    		client.AlberoServer.put(client.DatiServer[0][0],client.DatiServer[1]);
    		
    		client.PannelloDiviso.remove(client.CartellaServer);
    		client.CartellaServer = new JTree(client.AlberoServer);
    		JScrollPane Scroll = new JScrollPane(client.CartellaServer);
    		
    		client.PannelloDiviso.setOneTouchExpandable(true); 
        	client.PannelloDiviso.setDividerLocation(190);
        	client.PannelloDiviso.setDividerSize(10); 
        	client.PannelloDiviso.setContinuousLayout(true);
        	client.PannelloDiviso.setLeftComponent(Scroll);
    		
    	}
    	catch(IOException e)
    	{
    		client.Scrivi("Errore nella ricezione dei file");
    		client.Scrivi("Disconnessione in corso...");
    		Disconnetti();
    		client.Scrivi("Disconnesso");
    	}
    }
    
    public void stopClient()
    {
        Disconnetti();
    }
    
    
}
i files che dovrebbe dspedirmi il server devono essere scritti in un componente JTree preesistente attraverso l'utilizzo delle hashtable...ciao grazie