AnonimoVeneziano
27-09-2007, 18:32
Ciao,
sto sviluppando una semplice applicazione in rete e mi trovo davanti ad un problema.
Ho un Server che gestisce delle connessioni via Socket a dei client dall'altra parte della rete col classico modello "ad ogni connessione in arrivo fai partire un thread che gestisce quella connessione" .
La trasmissione avviene in questo modo :
1 . Connessione da parte del client
2. Il server crea il thread e manda una stringa di testo al client
3. Il client riceve la stringa, ci lavora dietro e manda una risposta al server
4. Il server riceve la risposta.
A questo punto entrambi (sia il thread del server che il client) terminano. Il problema è che spesso (quasi sempre) il client termina prima del server e questo sembra comportare la chiusura della connessione stabilita tramite il Socket col risultato che ,nel tentativo di leggere la stringa inviata dal client, il server lancia una IOException.
Così ho provato a mettere una:
Thread.sleep(100);
alla fine del client per fargli aspettare un pochino prima di chiudersi in modo che la comunicazione col server non venga interrotta e in effetti funziona. Il server riceve correttamente e poi tutto viene chiuso senza problemi.
Questo però ,dopotutto, non mi sembra per niente un workaround elegante, sia perchè esteticamente non è per niente bello ,sia perchè niente mi dice che, col sistema sotto sforzo o rete intasata, il server non richieda più di 100 millisecondi per completare la raccolta dei dati.
Che si può fare? :)
Grazie
Ciao
sto sviluppando una semplice applicazione in rete e mi trovo davanti ad un problema.
Ho un Server che gestisce delle connessioni via Socket a dei client dall'altra parte della rete col classico modello "ad ogni connessione in arrivo fai partire un thread che gestisce quella connessione" .
La trasmissione avviene in questo modo :
1 . Connessione da parte del client
2. Il server crea il thread e manda una stringa di testo al client
3. Il client riceve la stringa, ci lavora dietro e manda una risposta al server
4. Il server riceve la risposta.
A questo punto entrambi (sia il thread del server che il client) terminano. Il problema è che spesso (quasi sempre) il client termina prima del server e questo sembra comportare la chiusura della connessione stabilita tramite il Socket col risultato che ,nel tentativo di leggere la stringa inviata dal client, il server lancia una IOException.
Così ho provato a mettere una:
Thread.sleep(100);
alla fine del client per fargli aspettare un pochino prima di chiudersi in modo che la comunicazione col server non venga interrotta e in effetti funziona. Il server riceve correttamente e poi tutto viene chiuso senza problemi.
Questo però ,dopotutto, non mi sembra per niente un workaround elegante, sia perchè esteticamente non è per niente bello ,sia perchè niente mi dice che, col sistema sotto sforzo o rete intasata, il server non richieda più di 100 millisecondi per completare la raccolta dei dati.
Che si può fare? :)
Grazie
Ciao