Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    16

    [JAVA] massima connessione serversocket

    Ciao,
    c'e' un modo per poter specificare il massimo numero di socket che un ServerSocket puo accettare?

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    un server accetta una connessione per volta

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    16
    mm..Si, che acceta una connessione per volta lo so; pero'mi interessava sapere un'altra cosa, mi sono spiegato male. In pratica io voglio poter specificare il numero massimo di connessioni attive, in modo che la classe server raggiunto il limite non accetti piu' altre connessioni; una volta disconnesso un client possa accettare ancora connessioni.
    Cosa posso fare? mettere un contatore nella classe ServerThread che mi indichi il numero di connessioni? mi sembra macchinoso..consigli?

    codice:
    class Server{
       ServerSocket server=new ServerSocket(6666);
       Socket client;
    
       while(listening){
    
       new ServerThread(server.accept()).start();
    
       }
    }
    
    class ServerThread extends Thread{
    
    Socket client;
    
       ServerThread(Socket client){
        this.client=client
       }
    
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    315
    Originariamente inviato da s2000
    Cosa posso fare? mettere un contatore nella classe ServerThread che mi indichi il numero di connessioni? mi sembra macchinoso..consigli?
    Direi che ti conviene mettere un contatore e ogni volta che un client si disconnetti lo decrementi, cosi' che il server possa accettare altre connessioni.
    Ciao,
    Lorenzo

  5. #5
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    al posto di while (true) metti un for (int i=0; i<20; i++)

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    16
    Originariamente inviato da lelefante
    Direi che ti conviene mettere un contatore e ogni volta che un client si disconnetti lo decrementi, cosi' che il server possa accettare altre connessioni.
    Gia..un problema che sorge pero' e' che se il client cade senza volerlo non posso decrementare il contatore, cosa che potrei fare solo nel caso in cui la connessione viene tarminata esplicitamente..



    Originariamente inviato da floyd

    al posto di while (true) metti un for (int i=0; i<20; i++)

    Cosi non puo funzionare perche' cosi il server mi accetta al max 20 connessioni. Una volta accettate il server termina e non posso + accettarne nel caso che si sia disconnesso qualche client..

    mmm...vedro' di pensare qualcosa..magari un contatore x i client , e una classe che ogni tot secondi controlla i quelli attivi..

    Si accettano volentieri altri consigli...grazie comunque!

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    315
    A dire il vero e' anche inutile tenere un contatore, potresti sempre utilizzare un Vector per tenere traccia di tutti i client connessi, quindi usare le dimensioni di tale Vector per limitare il numero massimo di connessioni.
    Chiaramente il Vector e' solo un idea... vedi tu quale struttura dati puo' farti piu' comodo.
    Quando un client cade chiudendo il socket, il thread che sul server si occupa di comunicare con il client caduto riceve un'eccezione. Nella catch di quell'eccezione puoi mettere una chiamata ad un metodo del server principale che si occupa di terminare il thread ora inutile, di toglierlo dal Vector, ed ecco che hai liberato un posto per accettare una nuova connessione.

    L'unica cosa che non ricordo e' se l'eccezione viene lanciata nel momento in cui il client si sconnette, o solo al momento in cui il thread sul server cerca di inviare un messaggio su tale socket. In questo caso ti basta implementare nel protocollo un messaggio di conferma, da richiedere periodicamente ai client, per verificare che essi siano ancora connessi.
    Ciao,
    Lorenzo

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    16
    Ecco, giusto stavo proprio cercando di usare i Vector.

    Una cosa pero' non mi e' chiara. Se devo recuperare un elemento dal vector i metodi per farlo mi ritornano un tipo Object. Quindi visto che i mei oggetti sono tutti thread faccio un casting:

    Vector v=new Vector();

    ((Thread)(v.getLastElement())).start();

    cosi posso far partire il thread alla posizione che voglio.

    Ma se a priori non conoscessi che oggetti ho nel vector come faccio a fare il casting?


    Secondo cosa: quando si aggiunge un elemento se il vector non e' abbastanza grande per contenerlo viene incrementato. E' possibile assegnargli una dimensione fissa?


    Grazie per l'aiuto!

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    315
    Originariamente inviato da s2000
    Ecco, giusto stavo proprio cercando di usare i Vector.

    Ma se a priori non conoscessi che oggetti ho nel vector come faccio a fare il casting?

    Secondo cosa: quando si aggiunge un elemento se il vector non e' abbastanza grande per contenerlo viene incrementato. E' possibile assegnargli una dimensione fissa?
    Se almeno hai un'idea degli oggetti che potresti aver inserito puoi utilizzare l'operatore instanceof, ma se le tipologie possono essere tante comincia a diventare brutto vedere una fila di end if per capire di che tipo di oggetto si tratti... e' il caso di valutare un'altra soluzione.

    Un Vector di dimensione fissa non ha molto senso... tanto vale usare un' array, no?
    Ciao,
    Lorenzo

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2001
    Messaggi
    16
    Lo so che ha poco senso usare un vector di dimensione fissa, ma non ho molta voglia di scrivermi una classe apposta per gestire inserimento, rimozione ecc,ecc. dall'array.
    Vabe' per adesso non metto il limite di connessione..
    Cmnq, ho risolto come hai detto tu: per la rimozione dal vettore ho messo una istruzione nel catch , che viene eseguita quando cade il canale di comunicazione.

    grazie, ciao

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 © 2024 vBulletin Solutions, Inc. All rights reserved.