PDA

Visualizza versione completa : socket in java


illorca
22-04-2003, 13.19.02
Ciao a tutti,
ho un programma client server in cui per ogni connessione al serversocket lancio un thread.
vorrei trovare una maniera elegante per controllare se la connessione e' attiva oppure no sia dal lato client sia dal lato server, una specie di IsAlive() insomma che verrā lanciato da un thread periodicamente al fine di verificare in tempo reale quanti client sono connessi o se il server mi ha cacciato.
E' fondamentale non intaccare lo stream di comunicazione basato sul socket.

Qualcuno ha qualche idea?

grazie
ILLORCA

P8257 WebMaster
22-04-2003, 16.15.46
Non puoi fare un controllo sui thread stessi?..
cosa succede ai thread se si rompe qualcosa a livello di connessione? .. per timeout o errori vari?

Bye :cool:

illorca
28-04-2003, 16.17.05
In caso di mancanza di connessione il thread si interrompe solamente se tento di leggere o scrivere sullo stream creato sul socket lanciando una IOInterruptedException che se non ricordo male dovrebbe far parte del pacchetto java.io.*

L'unica soluzione sarebbe monitorare lo stream nel thread ma e' proprio quello che io volevo evitare per tenere divisa la comunicazione vera e propria da cio' che testa se essa e' attiva.

Altrimenti dovrei far si che i thread leggano continuamente e' comportarmi in maniera diversa a seconda di cio' che viene letto.

Il punto e' che non pensavo di dovermi complicare cosi' la vita per una testare la connessione che ritengo un implementazione che dovrebbe gia' esserci "di base":confused:

illorca
28-04-2003, 16.19.49
Esiste un controllo di timeout attivando il campo SO_KEEPALIVE ma dalla documentazione si ricava che si puo' attivare ma non modificare.

Il punto e' che lancia un'eccezzione dopo 2 ore di inattivita'.....:(

P8257 WebMaster
28-04-2003, 17.45.56
.. Quale eccezione viene lanciata? .. non puoi catcharla e solo a quel punto far partire uno specifico thread di controllo? .. come un polling

Bye :cool:

P8257 WebMaster
28-04-2003, 17.47.28
P.S.:
se č un controllo che evita il timeout, mi viene quasi da pensare che il periodo entro cui viene lanciata l'eccezione sia del tutto variabile e che dipenda da condizioni esterne dal timout stesso... ti risulta sempre 2 ore di inattivitā ad ogni test?

illorca
29-04-2003, 17.37.26
Parte dopo 2 ore. A dire la veritā non ho provato a catchare l'eccezione perchč a me serve qualcosa molto + rapido (2-3 secondi al max) un po come funziona per Kazaa per intendersi. Se chiudi la connessione ad internet ti dice subito "disconnected".
Non so se parta sempre dopo 2 ora, per la varitā ho provato solo una volta per verificare se quello che c'č scritto nella documentazione (parte dopo 2 ore)č vero.