[JAVA] - Client/Server Problemi di connessione e comunicazio

di il
1 risposte

[JAVA] - Client/Server Problemi di connessione e comunicazio

Ciao ragazzi,
vi prego di aiutarmi perchè sono nel pallone.Ho creato 2 programmi, un client ed un server.
Il Client è un cronometro che è scritto in modo da poter registrare in futuro la data, l'identità dell'utente loggato il tempo di connessione su di un file esterno, txt o excel. il cronometro deve partire solo se la login inserita è corretta.
Il server, controlla i dati di login inviatagli dal client, e in caso affermativo risponde con un flag, che autorizza il client a far partire il cronometro, in caso contrario invia un flag per segnalare l'errore di login.

quando provavo l'algoritmo da cmd senza interfaccia grafica i due programmi andavano bene e comunicavano, ma ora che ho cominciato ad implementarci intorno una GUI swing stanno facendo delle cose pazze e non funzionano bene più, specie nelle comunicazioni di scrittura e lettura fra client e server.

vi prego aiutatemi è molto importante per lavoro


ecco le mie classi

P.S. scusate se il codice è sporchissimo di commenti e altri comandi superflui per le prove passate!!!

--- SORGENTI LATO CLIENT ----

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Date;


public class Cronometro{
    private JFrame frame;
    private JLabel labelTime;
    private JPanel panelButtons;
    private JButton buttonLogin;
    private JButton buttonLogout;
	JTextField username = new JTextField(15);
	JTextField password = new JTextField(15);
	JTextField telefono = new JTextField(6);
	JLabel status = new JLabel("Server Disconnesso");
	JLabel empty = new JLabel();
	JLabel title = new JLabel ("LudecaLog-In");
	JLabel nameLabel = new JLabel ("Nome Utente: ");
	JLabel passLabel = new JLabel ("Password: ");
	JLabel telLabel = new JLabel ("Telefono: ");
    private Timer timer;
    private long startTime;
    
    String rigaTesto;
   // DataInputStream in;
    BufferedReader in ;
    DataOutputStream  out;
    Socket clientSocket;

    public Cronometro ()
    {

		
        frame = new JFrame ("Cronometro");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.setSize (500, 500);

        labelTime = new JLabel ("0:00:00.0");
        labelTime.setFont (new Font ("SansSerif", Font.BOLD, 30));
        labelTime.setHorizontalAlignment (JLabel.CENTER);

        buttonLogin = new JButton ("START");
        buttonLogout = new JButton ("STOP");
        buttonLogout.setEnabled (false);

		title.setForeground(Color.blue);
		title.setHorizontalAlignment(JLabel.CENTER);
		Font titleFont = new Font("Title", Font.CENTER_BASELINE, 50);
		title.setFont(titleFont);
		
		GridBagConstraints constr = new GridBagConstraints();
	
        panelButtons = new JPanel (new GridBagLayout());
        
        constr.gridx=0;
		constr.gridy=2;
		panelButtons.add(nameLabel,constr);
        constr.gridx=1;
		constr.gridy=2;
		panelButtons.add(username,constr);
		constr.gridx=0;
		constr.gridy=4;
		panelButtons.add(passLabel,constr);
		constr.gridx=1;
		constr.gridy=4;
		panelButtons.add(password,constr);
		constr.gridx=0;
		constr.gridy=5;
		panelButtons.add(telLabel,constr);
		constr.gridx=1;
		constr.gridy=5;
		telefono.setHorizontalAlignment(JLabel.LEFT);
		panelButtons.add(telefono,constr);
		constr.gridx=1;
		constr.gridy=8;
		panelButtons.add(empty,constr);
		constr.gridx=1;
		constr.gridy=9;
		panelButtons.add(status,constr);
		constr.gridx=0;
		constr.gridy=10;
        panelButtons.add (buttonLogin,constr);
	    constr.gridx=2;
		constr.gridy=10;
	    panelButtons.add (buttonLogout,constr);
		frame.setVisible(true);
		frame.add(title,BorderLayout.NORTH);
        frame.add (labelTime, BorderLayout.CENTER);
        frame.add (panelButtons, BorderLayout.SOUTH);
       

        timer = new Timer (50, new ActionListener () {
            public void actionPerformed (ActionEvent e) {
                long diffTime = System.currentTimeMillis () - startTime;

                int decSeconds = (int) (diffTime % 1000 / 100);
                int seconds = (int) (diffTime / 1000 % 60);
                int minutes = (int) (diffTime / 60000 % 60);
                int hours = (int) (diffTime / 3600000);

                String s = String.format ("%d:%02d:%02d.%d", hours, minutes,
                                          seconds, decSeconds);

                labelTime.setText(s);
 
            }
        });



        buttonLogin.addActionListener (new ActionListener () 
        {
            public void actionPerformed (ActionEvent e)
            {
        
            /***************** 1 CONNESSIONE AL SERVER *******/
        	           try {
        	        	   clientSocket = new Socket("192.168.42.176",9910);
        	        	   System.out.println("Connessione al Server in atto..."); 
        	        	  
        	        	   String loginOperatore = new String() ;
        	        	   
        	        			  loginOperatore=(username.getText()+password.getText()+telefono.getText());
        	        	   
        	        	   //apertura stream di input
        	               InputStreamReader isr=new InputStreamReader(clientSocket.getInputStream());
        	               BufferedReader in=new BufferedReader(isr);
        	               
        	               //apertura stream di output
        	               OutputStreamWriter osw=new OutputStreamWriter(clientSocket.getOutputStream());
        	               BufferedWriter bw=new BufferedWriter(osw);
        	               PrintWriter out=new PrintWriter(bw,true);
        	               
        	               //invio della stringa al server
        	               out.println(loginOperatore.toString());
        	               status.setText("Connesso al Server, controllo la Login");
        	               
        	               
        	               String confermaLogin = new String();
        	               System.out.println(confermaLogin=in.readLine());
        	               System.out.println("ciao----->"+(confermaLogin));
        	               if(confermaLogin.equals("OK"))
        	               {
        	            	   //if (clientSocket != null && out != null && in != null) {
    					            Tempo tempo = new Tempo();
			        				final Date data = tempo.dataCompleta;
			        				startTime = System.currentTimeMillis();
			        	            timer.start();
			        	            buttonLogin.setEnabled(false);
			        	            buttonLogout.setEnabled(true);        	            
			        				status.setText("<html>Log In Effettuato con Successo! <br>Data e Ora:<br>"+ data+"</html>");
								       		
					       // }	 
        	               }
        	               else if (confermaLogin.equals("DATI_ERRATI"))
        	               {
        	            	   status.setText("ERRORE!!! Dati di Log-In Errata!!");
         	            	   
        	               }
        	               
        	              
        	    
        	               //chiusura della socket e degli stream
        	               clientSocket.close();
        	               in.close();
        	               bw.close();
        	               out.close();		     				         
						   
					  	  } 
        	           catch (UnknownHostException err) 
					  	  {
					            System.err.println("Errore: probelmi di comunicazione");
					        } 
        	           catch (IOException err1)
        	           {
					            System.err.println("Errore: probelmi di comunicazione");
					        }
             
        	           /******************************** 1 FINE CONNESSIONE AL SERVER *******/
            }
        });

        buttonLogout.addActionListener (new ActionListener () {
            public void actionPerformed (ActionEvent e) 
            {
                    timer.stop ();
                    buttonLogin.setEnabled (true);
                    buttonLogout.setEnabled (false);
            		Tempo tempo = new Tempo();
            		final Date data = tempo.dataCompleta;
            		status.setText("<html>Log Out Effettuato con Successo! <br>Data e Ora:<br>"+ data+"</html>");
            		
            }
        });
        
        frame.setVisible (true);
    }
    
    

    public static void main (String[] args)
    {
    	SwingUtilities.invokeLater (new Runnable() 
    					           {
    		                        public void run() 
    		                        {
            							new Cronometro();
            						}
    							   });
    }
}


import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


public class Tempo{
		    public int ore,minuti,secondi,giorno,mese,anno;
		    public long dataMillis;
		    public Date dataCompleta = new Date();

		   //costruttore di default
		   public Tempo(){		    

			  GregorianCalendar c =new GregorianCalendar();
			  dataCompleta=c.getTime();
			  dataMillis=c.getTimeInMillis()/* / (24*60*60*1000)*/;
		      ore=c.get(Calendar.HOUR_OF_DAY);
		      minuti=c.get(Calendar.MINUTE);
		      secondi=c.get(Calendar.SECOND);
		      giorno=c.get(Calendar.DAY_OF_MONTH);
		      mese=c.get(Calendar.MONTH);
		      anno=c.get(Calendar.YEAR);

		      
		   }//Tempo
	}//tempo

---- SORGENTI LATO SERVER ----
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Date;


public class provaServer{
	
    private JFrame frame;
    private JPanel panelButtons;
    private JPanel panelSchermiTitolo;
      
    private JButton buttonConnetti;
    private JButton buttonDisconnetti;
    private JButton buttonSalvaFile;
    private JButton buttonAggiornaSchermi;
    private JButton buttonCreaLogin;
    private TextArea schermoOperatori;
    private TextArea schermoNotifiche;
    
	JTextField username = new JTextField(15);
	JTextField password = new JTextField(15);
	JTextField telefono = new JTextField(6);
	 JLabel status = new JLabel("Server Disconnesso");
	JLabel empty = new JLabel();
	JLabel title = new JLabel ("LudecaLog-In Server");

    
    String rigaTesto;
   // DataInputStream in;
    BufferedReader in ;
    DataOutputStream  out;


	 
 

    public provaServer ()
    {
  

     try {
         Socket clientSocket=null;
    	 ServerSocket serverSocket=null;
            serverSocket = new ServerSocket(9910);
            clientSocket = serverSocket.accept(); 
            System.out.println("Server: Sono attivo sulla Rete ");
            //serverSocket.setReuseAddress(true);
                              
            status.setText("Il Server è adesso Attivo sulla Rete");
            
            BufferedReader in= new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            //Stream di output
            DataOutputStream out=new DataOutputStream(clientSocket.getOutputStream());
            String loginOperatore = new String();
            loginOperatore=in.readLine();
            System.out.println("cronServer:---->"+loginOperatore);
            Operatore operatore = new Operatore();
            if(operatore.controllaLogin(loginOperatore)==true)
            {
            	out.writeBytes("OK");
            }
            else
            {
            	out.writeBytes("DATI_ERRATI");
            }
            
            System.out.println("Server: Sono attivo sulla Rete ");
            serverSocket.setReuseAddress(true);                
            status.setText("Il Server è adesso Attivo sulla Rete");
        
         }
         catch (IOException e1) {
            System.out.println(e1);
            System.out.println("Server: Non riesco ad aprire il socket");
         } 
    	

        
        frame = new JFrame ("CronometroServer");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.setSize (500, 500);

        //TEXT AREA
        //labelTime = new JLabel ("0:00:00.0");
        //labelTime.setFont (new Font ("SansSerif", Font.BOLD, 30));
        
        //labelTime.setHorizontalAlignment (JLabel.CENTER);

        buttonSalvaFile = new JButton ("SALVA FILE");
        buttonCreaLogin = new JButton ("CREA LOGIN");
        buttonAggiornaSchermi = new JButton ("AGGIORNA");
        buttonConnetti = new JButton ("CONNETTI");
        buttonDisconnetti = new JButton ("DISCONNETTI");
        //buttonSalvaFile.setEnabled (false);
        //buttonCreaLogin.setEnabled (false);
        //buttonAggiornaSchermi.setEnabled (false);
        //buttonDisconnetti.setEnabled (false);
        
        schermoOperatori = new TextArea();
        schermoNotifiche = new TextArea();
        schermoOperatori.setEnabled(false);
        schermoNotifiche.setEnabled(false);

		title.setForeground(Color.blue);
		title.setHorizontalAlignment(JLabel.CENTER);
		Font titleFont = new Font("Title", Font.CENTER_BASELINE, 45);
		title.setFont(titleFont);
		
		GridBagConstraints constr = new GridBagConstraints();
	
        panelButtons = new JPanel (new GridBagLayout());
        panelSchermiTitolo = new JPanel (new GridBagLayout());
        
		constr.gridx=0;
		constr.gridy=1;
		panelSchermiTitolo.add(title,constr);
		constr.gridx=0;
		constr.gridy=2;
		panelSchermiTitolo.add(schermoOperatori,constr);
		constr.gridx=0;
		constr.gridy=3;
		panelSchermiTitolo.add(schermoNotifiche,constr);
		constr.gridx=0;
		constr.gridy=4;
		panelSchermiTitolo.add(status,constr);
	    constr.gridx=2;
		constr.gridy=0;
	    panelButtons.add (buttonDisconnetti,constr);
	    constr.gridx=3;
		constr.gridy=0;
	    panelButtons.add (buttonAggiornaSchermi,constr);
	    constr.gridx=4;
		constr.gridy=0;
	    panelButtons.add (buttonSalvaFile,constr);
	    constr.gridx=5;
	 	constr.gridy=0;
	 	panelButtons.add (buttonCreaLogin,constr);
	    

		frame.add(title,BorderLayout.NORTH);
        frame.add (panelButtons, BorderLayout.SOUTH);
        frame.add (panelSchermiTitolo, BorderLayout.CENTER);
        frame.setVisible(true);

    
        buttonConnetti.addActionListener (new ActionListener() 
        {
            public void actionPerformed (ActionEvent e)
            {

          	
        	}
        });

        buttonDisconnetti.addActionListener (new ActionListener () {
            public void actionPerformed (ActionEvent e) 
            {
                try {
					clientSocket.close();
	                in.close();
	                out.close();  
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

            	
            }
        });
        
        frame.setVisible(true);        
    }

    public static void main (String[] args)
    {

    	SwingUtilities.invokeLater (new Runnable() 
    					           {
    		                        public void run() 
    		                        {
            							new provaServer();
            						}
    							   });
    	
    	 
        
    }
}

public class Operatore {
	
	private String identificatoreLogin = new String ();
	
	public Operatore()
	{
		identificatoreLogin="rafgrav1106";

	}
	
	public boolean controllaLogin(String loginInserita)
	{
	
			System.out.println("oper: "+identificatoreLogin);
				System.out.println("oper:" +loginInserita);
		if(loginInserita.equals(identificatoreLogin))
		{
			return true;
		}
		else
		{
			return false;
		}
		
	}
	
	public String getIdentificatoreLogin() {
		return identificatoreLogin;
	}
	
	public void setIdentificatoreLogin(String identificatoreLogin)
	{
		this.identificatoreLogin=identificatoreLogin;	
	}

	
}
Raga scusate per le imperfezioni e gli errori, chiedo aiuto seriamente, è per lavoro e sto arruginitissimo con java

1 Risposte

  • Re: [JAVA] - Client/Server Problemi di connessione e comunicazio

    Un'ulteriore precisazione di cui mi accorgo.
    anche se lancio prima il server, nel momento in cui clicko "connetti" dal client, per la log in, quest'evento mi scatena il caricamento di un secondo server!!!!
    questi programmi stanno facendo follie, vi prego aiutatemi
Devi accedere o registrarti per scrivere nel forum
1 risposte