Aiuto per java

di il
1 risposte

Aiuto per java

Inserisco di seguito il listato di un client e un server che devono scambiarsi file.
chiedo aiuto!!! avrei bisogno che qualcuno mi illustrasse anche a grandi linee il significato di questo codice.
accetto molto volentieri suggerimenti per modifiche che possono rendere il programma molto più capibile e intuitivo.
GRAZIE GRAZIE...


//server
class Server extends Thread{

private int letti;
private int totali;
private byte[] buffer;
private boolean exists=false;
private DataInputStream in;
private DataOutputStream out;
private File[] lista;
private ObjectOutputStream ser;
private BufferedOutputStream bos;
private BufferedInputStream bis;
private JList jlista;
private String percorso;
private String st;
private String dir;
private Socket s;




public Server(Socket s,File[] lista) {

try {
this.s=s;
in=new DataInputStream(s.getInputStream());
out=new DataOutputStream(s.getOutputStream());
ser=new ObjectOutputStream(s.getOutputStream());
this.lista=lista;
jlista=new JList(lista);
ser.writeObject(jlista);
start();

}
catch(IOException ie){
JOptionPane.showMessageDialog(null,\"Errore.\",\"Errore.\",JOptionPane.WARNING_MESSAGE);
}
}

public void run(){

try{
bos=new BufferedOutputStream(s.getOutputStream());
st=in.readUTF();

if (lista.length!=0){
for(int j=0;j<lista.length;j++){
inviaFile(lista[j]);

break;
}
System.out.println(\"File scaricato con successo!!!\");
}
else out.writeInt(-1);
}
catch(NullPointerException e){
System.out.println(e.getMessage());
}
catch(IOException e){System.out.println(e.getMessage());

}
}

public void inviaFile(File quale){

try{

bis=new BufferedInputStream(new FileInputStream(quale.getAbsolutePath()));
in=new DataInputStream(new FileInputStream(quale.getAbsolutePath()));
totali=in.available();
if (totali!=0){
out.writeInt(totali);
}
byte a=(byte)totali;
//buffer di a byte proprio quanti sono i dati in in.
buffer=new byte[a];
while((letti=bis.read(buffer))>0){
bos.write(buffer,0,letti);
bos.flush();
}
bis.close();

in=new DataInputStream(s.getInputStream());
}

catch(IOException ie){
JOptionPane.showMessageDialog(null,\"Errore.Non è possibile inviare i file\",\"Errore.\",JOptionPane.WARNING_MESSAGE);
}
}


}

class SceltaDir extends JFrame{

private JFileChooser jfc;
private int ris;
private File corrente;


public File scegli(){

jfc=new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if(jfc.showOpenDialog(null)==JFileChooser.APPROVE_OPTION)
return jfc.getSelectedFile();
else return null;

}


}


public class ServerFts{

public static void main(String[] args){

ServerSocket ss;
File dir;
SceltaDir sd;
File[] listafile;
Socket so;

JOptionPane.showMessageDialog(null,\"<html><h1>RICORDATI: devi selezionare una directory contenente solo file</h1></html>\",\"Informazione utile\",JOptionPane.INFORMATION_MESSAGE);

sd=new SceltaDir();

dir=null;
listafile=null;
//listfiles genera la lista dei file che deve essere trasmessa al client dopo la selezione della directory nel server
while(dir==null || listafile.length==0){
dir=sd.scegli();
listafile=dir.listFiles();
}
try{
System.out.println(\"Server creato con successo!\");
ss=new ServerSocket(1024);
System.out.println(\"Server in attesa di richieste...\");
while(true){
so=ss.accept();
new Server(so,listafile);
}
}


catch(IOException e){
JOptionPane.showMessageDialog(null,\"Errore.Non è possibile la connessione\",\"Errore.\",JOptionPane.WARNING_MESSAGE);
}
}
}



//client

class InterfacciaGrafica extends JFrame{

private Socket socket;
private Cliente cliente;
private String ip;
private int porta;
private Container co;
private JScrollPane jsp;
private JLabel nomeFile=new JLabel();
private JLabel progetto=new JLabel();

private JLabel vuoto1=new JLabel();
private JLabel vuoto2=new JLabel();
private JLabel vuoto3=new JLabel();
private JLabel vuoto4=new JLabel();
private JLabel passo1=new JLabel();
private JLabel passo2=new JLabel();
private JLabel passo3=new JLabel();

private JPanel pa1=new JPanel();
private JPanel pa2=new JPanel();
private JPanel pa3=new JPanel();

private JButton scarica=new JButton(\"Scarica\");
private JButton nuovoSelezione=new JButton(\"Seleziona nuovo file\");
private JButton selezionaDir=new JButton(\"Seleziona directory in cui vuoi salvare il file:\");

public static JList lista;

public static JTextField directory=new JTextField();
public static JTextField fileSelezionato=new JTextField();


public InterfacciaGrafica(String ip,int porta){

setTitle(\"ClientFts\");
setSize(800,400);
this.ip=ip;
this.porta=porta;
socket();
lista=cliente.listaFile();
co=getContentPane();
pa1.setLayout(new GridLayout(3,1));
pa2.setLayout(new GridLayout(3,1));
co.setLayout(new GridLayout(5,1));
selezione();
directory.setEditable(false);
fileSelezionato.setEditable(false);
passo1.setText(\"1°passo: selezionare il file da scaricare.\");
passo2.setText(\"2°passo: selezionare la directory dove salvare il file.\");
passo3.setText(\"3°passo: cliccare sul pulsante SCARICA!!!\");
nomeFile.setText(\"File selezionato:\");

vuoto1.setText(\" \");
vuoto2.setText(\" \");
vuoto3.setText(\" \");
vuoto4.setText(\" \");

pa1.add(vuoto1);
pa1.add(selezionaDir);
pa1.add(directory);
pa2.add(vuoto2);
pa2.add(nomeFile);
pa2.add(fileSelezionato);
co.add(passo1);
co.add(jsp);
co.add(passo2);
co.add(pa1);
co.add(passo3);
co.add(pa2);
co.add(scarica);

setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public void socket(){
try{
socket=new Socket(ip,porta);
cliente=new Cliente(socket);
}
catch(IOException ie){
JOptionPane.showMessageDialog(null,\"Connessione fallita.\",\"Impossibile connettersi con il Server.\",JOptionPane.WARNING_MESSAGE);
}
}

public void selezione() {

lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
lista.addListSelectionListener(new SelectFile());
jsp=new JScrollPane(lista);
selezionaDir.addActionListener(new SelectDir());
scarica.addActionListener(new ScaricaFile());

}



class SelectDir implements ActionListener{
public void actionPerformed(ActionEvent e){
if(InterfacciaGrafica.lista!=null){
JFileChooser jfc=new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if(jfc.showOpenDialog(null)==JFileChooser.APPROVE_OPTION)
directory.setText(jfc.getSelectedFile().getAbsolutePath()+\"/\");
JOptionPane.showMessageDialog(null,\"Directory dove hai deciso di salvare il file selezionato è:\" + jfc.getSelectedFile().getAbsolutePath() ,\"Directory.\",JOptionPane.INFORMATION_MESSAGE);
}
else JOptionPane.showMessageDialog(null,\"Lista vuota.Inutile selezionare una directory senza i file disponibili\",\"Vuota\",JOptionPane.INFORMATION_MESSAGE);
}
}


class ScaricaFile implements ActionListener{
public void actionPerformed(ActionEvent e){
cliente.start();
}
}



class SelectFile implements ListSelectionListener {
public void valueChanged(ListSelectionEvent e){
if(InterfacciaGrafica.lista!=null){
File file=(File)InterfacciaGrafica.lista.getSelectedValue();
fileSelezionato.setText(file.getName());
}
else JOptionPane.showMessageDialog(null,\"Lista vuota\",\"Lista vuota\",JOptionPane.INFORMATION_MESSAGE);
}
}


}




class Cliente extends Thread{

private BufferedInputStream bis;
private BufferedOutputStream bos;
byte[] buffer;
private DataOutputStream out;
private DataInputStream input;
private int quanti;
private int letti;
private int attuali;
private JList lista;
private Socket socket;
private ObjectInputStream ser;
private String dir;
private String file;


public Cliente(Socket socket){
this.socket=socket;
try{
bis=new BufferedInputStream(socket.getInputStream());
ser=new ObjectInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
input=new DataInputStream(socket.getInputStream());
}
catch(IOException e){
JOptionPane.showMessageDialog(null,\"Impossibile aprire gli stream.\",\"Dati illeggibili.\",JOptionPane.WARNING_MESSAGE);
}
}

public JList listaFile(){
try{
lista=(JList)ser.readObject();
}
catch(IOException e){
JOptionPane.showMessageDialog(null,\"Impossibile scaricare la lista dei file.\",\"Dati illeggibili.\",JOptionPane.WARNING_MESSAGE);
}
catch(ClassNotFoundException cnfe){
}
finally{
return lista;
}
}

public void run(){
try{
file=InterfacciaGrafica.fileSelezionato.getText();
dir=InterfacciaGrafica.directory.getText();
out.writeUTF(file);
buffer=new byte[1024];
bos=new BufferedOutputStream(new FileOutputStream(dir+file));
quanti=input.readInt();
if(quanti>0){
attuali=0;
while(attuali<quanti){
letti=bis.read(buffer);
attuali+=letti;
bos.write(buffer,0,letti);
bos.flush();
}
}
JOptionPane.showMessageDialog(null,\"File scaricato con successo.\",\"Download completato.\",JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(null,\"<html><h3>Torna al Server e scegli una nuova directory se vuoi scaricare altri file\",\"Nuova selezione</h3></html>\",JOptionPane.INFORMATION_MESSAGE);
ser.close();
bis.close();
out.close();
input.close();
bos.close();
socket.close();


}
catch(IOException e){
JOptionPane.showMessageDialog(null,\"Impossibile scaricare il file.\",\"Dati illeggibili.\",JOptionPane.WARNING_MESSAGE);
}
}
}

public class ClientFts{
public static void main(String[] args){
Socket socket=null;
String ip=null;
String port=null;
int porta=0;
JList list;
while(socket==null){
try{
ip=JOptionPane.showInputDialog(\"Inserisci l'indirizzo del Server:\",\"127.0.0.1\");
if(ip==null)
System.exit(1);
port=JOptionPane.showInputDialog(\"Inserisci la porta del Server:\",\"1024\");
JOptionPane.showMessageDialog(null,\"Connessione avvenuta\",\"Connessione\",JOptionPane.INFORMATION_MESSAGE);
if(port==null)
System.exit(1);
porta=Integer.parseInt(port);
socket=new Socket(ip,porta);
}
catch(IOException e){
JOptionPane.showMessageDialog(null,\"Connessione al server impossibile.\",\"Connessione fallita.\",JOptionPane.INFORMATION_MESSAGE);
}
}
new InterfacciaGrafica(ip,porta);
}
}

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte