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