Questo è il thread con cui gestisco le operazioni del server

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");
		}
	}
}
ps gurdate soltanto la prima funzione di ricezione richiesta ed ipotizzate che la prima richiesta sia files...