Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Server Multiporta

  1. #1

    Server Multiporta

    Salve ragazzi,
    stò lavorando per un caso di studio per l'università ad un piccolo firewall.
    Ho creato un programma che, mettendosi in ascolto su una porta, trova un malintenzionato e chiude la connessione.
    Il tutto funziona su una singola porta, ma vorrei farlo funzionare su una serie di porte.
    Ho ben chiaro che debbo usare i Thread, ma è la prima volta che mi occupo di programmazione multi-thread e ho bisogno di un aiuto.
    Riporto un pezzetto di codice:

    codice:
    /*Creo un server, ma solo su una porta. Quì vorrei che il serve sia in ascolto su più di una porta!*/
    ServerSocket socket = new ServerSocket(port);
    		
    		try {
    			// Ciclo infinito in modo da controllare ogni istante 
    			// la nuova socket
    			while (true) {
    				
    				// Accettazione della socketServer
                                    /* Quì avrei bisogno di mettere il server in ascolto su una serie di
                                    porte, e non solo una! */
    				Socket canal = socket.accept();
    				try {
    					
    					/*
    					 * In caso di connessione al nostro Pc, il metodo defendPort
    					 * crea un oggetto di tipo ScannerSocket, in modo da bloccare
    					 * la socket e mostrare i dati del malintenzionato.
    					 */
    					new ScannerSocket(canal);
    				} catch (IOException e) {
    					
    					// Chiusura del collegamento e della socket aperta
    					canal.close();
    				}
    			}
    		} finally {
    			socket.close();
    		}
    	}
    Potreste aiutarmi, o perlomeno mettermi sulla strada giusta??

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Semplicemente, dovrai creare N thread, ciascuno contenente la sua ServerSocket in ascolto su una porta.

    codice:
    public class ServerThread extends Thread {
       private int port;
       private ServerSocket server;
    
       public ServerThread(int port) { this.port = port; }
    
       @Override
       public void run() {
          try {
             server = new ServerSocket( port );
             Socket s = server.accept();
             ...
          } catch (Exception e) { ... }
       }
    }
    Dovrai creare N oggetti di questa classe ed avviarli:

    codice:
    public static void main(String[] args) {
       // Un server in ascolto sulla porta 3000
       ServerThread s1 = new ServerThread( 3000 );
    
       // Un server in ascolto sulla porta 3001
       ServerThread s2 = new ServerThread( 3001 );
    
       // Un server in ascolto sulla porta 3002
       ServerThread s3 = new ServerThread( 3002 );
    
       // Avvio i tre server
       s1.start();
       s2.start();
       s3.start();
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie mille!!!
    Funziona alla grande!!!

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.