PDA

Visualizza la versione completa : [JAVA] Client/server: limitare numero connessioni di client


naide
27-11-2005, 21:28
Ho un server multithread che rimane in attesa di connessione da parte di più client.
come faccio per permettere la connessione solo ad un certo numero di client ( ad esempio solo 5 connessioni alla volta)?

so che dovrei fare una cosa del tipo:
ServerSocket serverSocket = new ServerSocket(port,5);

ma il mio server continua ad accettare connessioni anche da più server... non so... sicuramente dovrei metter qualche controllo, ma non so come e cosa è meglio fare....
forse anche nel client dovrei mettere qualche controllo o viene bloccato automaticamente?

Vorrei sapere se qlc sa dove potrei prendere qualche esempio di questo tipo.... Grazie!

netarrow
28-11-2005, 15:19
crei una variabile statica e fai una ciclo che nel predicato di controllo guarda se questo contatore è a 5 o no.

:ciauz:

naide
28-11-2005, 18:41
dici di fare un controllo nel server del tipo
if(count<5)
{
clientSocket = serverSocket.accept();
count ++;
}
else System.ou.println("connessione non accettata");

se ho capito bene quello che vorresti dire mi chiedo che valore ha
il costruttore:
"ServerSocket(int port, int backlog)"
dove backlog mi indica appunto il numero massimo di connessioni che possono stare in coda...

non dovrebbe essere lui a gestire questa problematica?

potrei forse fare funzionare il tutto mettendo qualche controllo qua e là, ma pensavo dovesse essere una "cosa automatica"... :master:

LeleFT
28-11-2005, 18:46
Credo che il Backlog non sia il massimo numero di connessioni, ma il massimo numero di richieste di connessioni contemporanee.
Vale a dire che non vi possono essere più di n richieste contemporanee di connessioni, ma non che non vi possano essere più di n connessioni attive, arrivate tutte in tempi diversi...


Ciao. :ciauz:

XWolverineX
28-11-2005, 18:47
Originariamente inviato da netarrow
crei una variabile statica e fai una ciclo che nel predicato di controllo guarda se questo contatore è a 5 o no.

:ciauz:

Io credevo intendesse un'altra cosa.
In una classe, un membro static, ha sempre lo stesso valore. Prendila come una variabile in comune.
Dichiarando quindi una cosa del tipo


static int Connessioni, puoi avere un costante controllo di tutte le istanze della tua classe che hai in corso, e se queste superano 5, impedire nuove connessioni. Almeno cosi ho capito.

naide
28-11-2005, 18:54
"Credo che il Backlog non sia il massimo numero di connessioni, ma il massimo numero di richieste di connessioni contemporanee.
Vale a dire che non vi possono essere più di n richieste contemporanee di connessioni, ma non che non vi possano essere più di n connessioni attive, arrivate tutte in tempi diversi... "

ok siamo daccordo è così... ma se lancio in un ciclo 30 client non dovrebbe accettarli tutti o sbaglio? o visto che il server accetta la prima connessione e si mette subito in attesa di un'altra, i client non verranno mai messi in coda?

naide
28-11-2005, 18:55
"In una classe, un membro static, ha sempre lo stesso valore. Prendila come una variabile in comune. "
in comune tra client e server?

XWolverineX
28-11-2005, 18:58
Originariamente inviato da naide
"In una classe, un membro static, ha sempre lo stesso valore. Prendila come una variabile in comune. "
in comune tra client e server?

Mmm...no.
Ma scusa che interessa al client? Questo deve solo richiedere connessione al server. Sarà quest'ultimo poi a valutare la situazione e vedere se accettare o no la connessione...

naide
28-11-2005, 19:02
quindi devo mettere un controllo prima di accettare la connessione del client, no? :confused:
poi meglio se la variabile sia static....

XWolverineX
28-11-2005, 19:12
Bhe si.
Ma 5 sono le connessioni simultanee oppure 5 in tutto?

Loading