Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di cala87
    Registrato dal
    Aug 2005
    Messaggi
    34

    [JAVA] Uso di socket e stream utilizzando SWING

    Ciao sono di nuovo tornato a chiedere consigli riguardo il mio programma client server di traferimento file che fino a due settimane fa ha richiesto un piccolo aiuto per la risoluzone di un piccolo problema...Ora mi trovo di fronte ad una altro problema : come avavate detto ho creato una classe che estende thread che mi gestisce l'avvio del server (per non creare problemi con la grafica), questa rimane in attesa fino a quando un utente non si connette al server e quando quest'ultimo è connesso genera un thread per la gestione delle operazioni di down/up tra l'utente stesso e il server. Viceversa ho fatto per la classe client: ho creato una clase che estende thread che mi gestisce le operazioni tra client e server; è qui che mi nasce il problema, attraverso l'utilizzo dei socket e degli stream devo trasmettere le informazioni attraverso dei flussi di byte, in pratica succede che il cliebnt mi invia correttamente i flussi ma il thread di gestione operazioni tra server e client non riesce a ricevere nulla, nonostante il fatto che i dati dai flussi vengano letti nell'ordine corretto...

    Potete aiutarmi???

    Grazie ciao

  2. #2
    Utente di HTML.it L'avatar di cala87
    Registrato dal
    Aug 2005
    Messaggi
    34
    Se serve aggiungo il codice...

  3. #3
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    mica ho capito... la connessione viene stabilita?

  4. #4
    Utente di HTML.it L'avatar di cala87
    Registrato dal
    Aug 2005
    Messaggi
    34
    certo..la connessione è stabilita in modo corretto...

  5. #5
    Utente di HTML.it L'avatar di cala87
    Registrato dal
    Aug 2005
    Messaggi
    34
    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...

  6. #6
    Utente di HTML.it L'avatar di cala87
    Registrato dal
    Aug 2005
    Messaggi
    34
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.