PDA

View Full Version : [Java] backlog su windows


NRG
17-02-2005, 11:11
ciao a tutti, ho realizzato un applicativo java (j2se 1.4.2_06) che implementa un server socket e volendo fissare il numero di connessioni massime attive ad 1, come da documentazione java, ho creato il serversocket con la primitiva

ServerSocket(int port, int backlog)

p.es. ServerSocket(7777, 1)

ma provando, accetta contemporaneamente non solo 1 connessione ma anche 2, 3,...

in effetti, guardando in rete, ho trovato questo documento:

http://info.iet.unipi.it/~dini/Teaching/TIGA/materiale-didattico/lab/lab7-soluzione.pdf

nel quale nelle ultime righe esprimono il fatto che dopo ripetuti test su sistemi Windows il parametro di backlog sembra essere ignorato.

qualcuno ha qualche suggerimento per risolvere il problema???

grazie

NRG
18-02-2005, 08:08
qualcuno ha qualche suggerimento su come posso fare per permettere al mio server socket di rifiutare tutte le connessioni quando una è già attiva?

^TiGeRShArK^
18-02-2005, 09:40
spè un attimo....
praticamente tu NON vuoi accettare connessioni quando un client è già collegato?
praticamente devi rendere questa tua parte di prog single-threaded, in modo ke dopo il ServerSocket.accept() parta il codice di gestione, e una volta finito questo codice riparti dal ciclo....
x fare un esempio in modo da essere più kiaro....

Socket client=null;
ServerSocket server=new ServerSocket(666);
while(true){
client=server.accept();
...
CODICE DA ESEGUIRE SUL SOCKET
...
}

In questo modo metti in ascolto il server solo dopo ke hai finito di servire il client.
A okkio dovrebbe funzionare. Prova e fammi sapere......

NRG
18-02-2005, 13:30
grazie per l'idea ^TiGeRShArK^ ma l'applicazione ha già una struttura simile... ma sembra che dopo aver fatto l'accept e aver creato la prima connessione, mentre stia gestendo il flusso del programma con la prima connessione, alla ricezione del tentativo di una seconda connessione, risponda in modo positivo stabilendo una nuova connessione (presente nell'elenco del comando NETSTAT con stato ESTABILISHED) e ricevendo in modo normale un messaggio dal client (messaggio che non viene processato dall'applicazione java, perché occupata a gestire la prima connessione, e che probabilmente rimane nella coda delle connessioni) ... probabilmente se l'applicativo facesse una nuova accept troverebbe la seconda connessione in coda (forse!!!)

non so se mi sono spiegato bene e ne hiedo scusa

grazie

^TiGeRShArK^
19-02-2005, 13:18
ma è un applicazione o un applet?
e cmq ... se ti accetta la connessione ma non fa niente ke prob ti ritrovi?
non puoi dire ad esempio al client di continuare con l'elaborazione solo dopo aver ricevuto un messaggio di conferma dal server?