Pagina 3 di 3 primaprima 1 2 3
Visualizzazione dei risultati da 21 a 28 su 28
  1. #21
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    ciao,
    modifico il post visto che hai postato il nuovo codice.
    Questo LudecaLogInServer è il thread che parte ad ogni connessione, giusto?

    1. Perchè inizializi gui con new LudecaLogInServerGUI(); se poi la setti nel costruttore?

    2. ArrayList<Operatore> listaOperatori: Ogni therad avrà una sua lista. Se due client fanno il login ci saranno due thread con ognuno una listaOperatori di dimensione 1, che poi vai a scrivere nella Jtable

    PS: Se non ha capito male, la tua intenzione è quella che un client si connette al server, fa il login è poi la connessione si chiude,giusto ? non viene mantenuta la connessione fino a chiusura del client

  2. #22

    classe ServerGUI

    codice:
     
    import javax.swing.JFrame;
    
    import javax.swing.JPanel;
    
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    
    
    import javax.swing.SwingConstants;
    
    import java.awt.Font;
    import java.awt.Color;
    
    
    public class LudecaLogInServerGUI{
    
    	public JFrame frmLudecaLoginServer;
    	public   JTable table = new JTable();
    	public JPanel panel_1;
    	
    	  JTextArea schermoLog = new JTextArea();
    
        
         String[] nomiColonne = new String[] {"OPERATORE", "DATA LOG-IN", 
                "TELEFONO", "PAUSA", "N\u00B0 PAUSE"};
    
      String[][] valoriCelle = new String[50][4]; 
      DefaultTableModel modelloTabella=null;
    	/**
    	 * Launch the application.
    	 */ 
    
    
    	/**
    	 * Create the application.
    	 */
    	public LudecaLogInServerGUI() {
    		initialize();
    		//frmLudecaLoginServer.setVisible(true);
    	}
    
    	/**
    	 * Initialize the contents of the frame.
    	 */
    	@SuppressWarnings("unused")
    	private void initialize() {
    		/* Set the Nimbus look and feel */
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
             * For details see http://download.oracle.com/javase/tu...feel/plaf.html 
             */
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(LudecaLogInServerGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(LudecaLogInServerGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(LudecaLogInServerGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(LudecaLogInServerGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            
    		frmLudecaLoginServer = new JFrame();
    		frmLudecaLoginServer.setTitle("Ludeca Log-In Server");
    		frmLudecaLoginServer.setResizable(false);
    		frmLudecaLoginServer.setBounds(100, 100, 580, 601);
    		frmLudecaLoginServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frmLudecaLoginServer.getContentPane().setLayout(null);
    		
    		JScrollPane scrollPane = new JScrollPane();
    		scrollPane.setBounds(10, 63, 554, 361);
    		frmLudecaLoginServer.getContentPane().add(scrollPane);
    
    		
    		for(String[] riga:valoriCelle)
    		{
    			for(String cella:riga)
    			{
    							cella="null";
    			}
    		}
    		modelloTabella = new DefaultTableModel(valoriCelle, nomiColonne){
    
    		    /**
    			 * 
    			 */
    			private static final long serialVersionUID = 6792095612592715973L;
    
    			@Override
    		    public boolean isCellEditable(int row, int column) {
    		       //all cells false
    		       return false;
    		    }
    		};
    
    		table.setCellSelectionEnabled(true);
    		
    		scrollPane.setViewportView(table);
    		
    				
    		table.setModel(modelloTabella);
    		table.getColumnModel().getColumn(0).setPreferredWidth(170);
    		table.getColumnModel().getColumn(1).setPreferredWidth(200);
    		table.getColumnModel().getColumn(2).setPreferredWidth(64);
    		table.getColumnModel().getColumn(3).setPreferredWidth(43);
    		table.getColumnModel().getColumn(4).setPreferredWidth(61);
    		
    		
    
    		panel_1 = new JPanel();
    		panel_1.setBounds(0, 532, 574, 34);
    		frmLudecaLoginServer.getContentPane().add(panel_1);
    		panel_1.setLayout(null);
    		
    		JButton btnNewButton = new JButton("AGGIORNA SCHERMO");
    		btnNewButton.setBounds(10, 11, 139, 23);
    		panel_1.add(btnNewButton);
    		
    		JButton btnNewButton_1 = new JButton("CREA LOG-IN");
    		btnNewButton_1.setBounds(440, 11, 124, 23);
    		panel_1.add(btnNewButton_1);
    		
    		JButton btnNewButton_2 = new JButton("SALVA FILE");
    		btnNewButton_2.setBounds(245, 11, 89, 23);
    		panel_1.add(btnNewButton_2);
    		
    		JPanel panel = new JPanel();
    		panel.setBounds(0, 0, 564, 52);
    		frmLudecaLoginServer.getContentPane().add(panel);
    		panel.setLayout(null);
    		
    		JLabel lblNewLabel = new JLabel("Ludeca Log-In Server");
    		lblNewLabel.setForeground(Color.BLUE);
    		lblNewLabel.setFont(new Font("SansSerif", Font.BOLD, 30));
    		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
    		lblNewLabel.setBounds(0, 0, 574, 52);
    		panel.add(lblNewLabel);
    		
    		JScrollPane scrollPane_1 = new JScrollPane();
    		scrollPane_1.setBounds(10, 431, 554, 101);
    		frmLudecaLoginServer.getContentPane().add(scrollPane_1);
    		
    		
    		schermoLog.setText("");
    		scrollPane_1.setViewportView(schermoLog);
    	}
    }

  3. #23
    codice:
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    public class LudecaLogInServerParallelMain 
    {
    	
                public static void main (String[] args)  throws Exception 
    	     {
    		    	  
    	    	 ServerSocket serverSocket = new ServerSocket(9910);				
    	         serverSocket.setReuseAddress(true);
    	        LudecaLogInServerGUI gui = new LudecaLogInServerGUI();
    	       gui.frmLudecaLoginServer.setVisible(true);
    	        
    	        //Ciclo infinito di ascolto dei Client
    	        
    	         while(true) 
    	         {
    	        	 try
    	        	 {
    	             System.out.println("In attesa di chiamate dai Client... ");
    	             Socket socket = serverSocket.accept();
    	             System.out.println("Ho ricevuto una chiamata di apertura da:\n" +
    	socket);
    	             LudecaLogInServer serverRunnable = new LudecaLogInServer(socket,gui);
    	             Thread serverThread = new Thread(serverRunnable);
    	             serverThread.start();
    	             serverThread.join();
    	             socket.close();
    	             
    	        	 }
    	        	 catch(Exception e)
    	        	 {
    	        		 e.printStackTrace();
    	        	 }
    	      
    	           }
    	     
    	  }

  4. #24
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Ripeto, in caso il post si è perso tra le mille linee di codice

    1. Perchè inizializi gui con new LudecaLogInServerGUI(); se poi la setti nel costruttore?

    2. ArrayList<Operatore> listaOperatori: Ogni therad avrà una sua lista. Se due client fanno il login ci saranno due thread con ognuno una listaOperatori di dimensione 1, che poi vai a scrivere nella Jtable

    PS: Se non ha capito male, la tua intenzione è quella che un client si connette al server, fa il login è poi la connessione si chiude,giusto ? non viene mantenuta la connessione fino a chiusura del client


    PS Non vorrei dire una stupidaggine, ma se fai

    codice:
    while(true){ 
        try
            {
                 ...
    	     serverThread.start();
    	     serverThread.join();
    	     socket.close();
    	             
       	 }catch{...}
    }
    A cosa serve creare i thread, se poi con join blocchi tutto in attesa che il thread termini?
    Il join dovresti farlo appena prima che il main thread termini, in modo da assicurarti che tutti i thread figli ancora attivi terminino correttamente rilasciando le eventuali risorse

  5. #25

    ciao boots!

    ciao amico!
    Come avrai visto dopo la tua risposta ho postato altre classi
    (che sono state modificate poco o per niente)

    come posso impostare la lista array affinchè resti in memoria sul thread principale e non venga rigenerata ad ogni thread?

    p.s. ma il join non è quella funzione che aspetta tutti i thread al fine di non creare inconsistenza sui dati salvati da piu thread in momenti diversi?
    credi debba proprio toglierlo o porlo altrove? e dove?

    grazieeeeeeeeeeeeeeeeee

  6. #26
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    La lista potresti:

    1. Metterla come campo di ServerGUI, visto che l'istanza è unica. Mettendo un metodo AggiungiOperatore(Operatore)
    (Tra l'altro io ci metterei anche il codice per modificare la JTable, visto che c'entra poco con lo scopo thread)

    2. Fare come con ServerGUI: metterla nella classe main e passarla per parametro ai threads

    3 Fare una classe, per la gestione della lista, come Singleton

    Per il join, dici bene: aspetta. Quindi se tu fai

    thread.start();
    thread.join();

    subito dopo lo start il main thread rimane in attesa invece di continuare ad accettare i vari client. In poche parole si comporta come un server mono-thread

    Ad esempio puoi vedere qua un esempio di come usare join. (anche se il tuo è un caso particolare visto che hai un while(1) e non credo che sai a priori il numero thread)

  7. #27
    perchè ieri sera il programma funzionava bene e nell'arco della notte adesso da un loop infinito di accept?????
    ho fatto 3000 prove ieri con 15 client e si collegava benissimo riconoscendo tutti e attivando i cronometri uffaaaaaaaaaaaaaaaa

  8. #28
    ragazzi risolto
    è il serversSocket.close() che non piace al programma
    quando lo elimino funziona a pennello

    bhaaaaaaaaaaaaaaaaaa, ma perchè questo????

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.