Ed_Bunker
02-09-2005, 22:33
Ciao ho un problema con un piccolo programma che riassumo brevemente. Un server (E' un thread) rimane in ascolto (Ininterrottamente) su un server socket tcp. Ad ogni connessione in entrata legge il messaggio in input da parte del client, registra l'oggetto di tipo Received in una coda condivisa, invia un "ack" mediante un PrintWriter all'utente (Inutile ma mi serve farlo...) e torna ad attendere la connessione successiva (accept()).
(Un oggetto Received e' un record composto dal messaggio vero e proprio e dall'oggetto PrintWriter attraverso il quale poter rispondere al client).
Concorrentemente un altro thread si occupa di leggere tutti i messaggi inseriti nella coda, di controllarne il contenuto e di rispondere opportunamente al client (Utilizzando l'oggetto di tipo PrintWriter).
Cio' che accade e' che gli utenti riescono ad inviare correttamente i loro messaggi, a ricevere l'"ack" ma, nel momento in cui devono ricevere la risposta (Facendo una readLine), ottengono un null (Come se il socket fosse stato chiuso).
Penso che il problema derivi dal fatto che il primo handler (Che e' costituito da un ciclo while(true)) quando passa a trattare la connessione successiva chiude quella precedente e percio' anche il writer registrato nell'oggetto di tipo Received "perde validita'".
Pero' non ne sono sicuro. Anche perche' il thread che si occupa di inviare le risposte riesce ad utilizzare correttamente il PrintWriter senza lanciare eccezioni.
Spero di essermi fatto capire... :rolleyes:
thks :)
(Un oggetto Received e' un record composto dal messaggio vero e proprio e dall'oggetto PrintWriter attraverso il quale poter rispondere al client).
Concorrentemente un altro thread si occupa di leggere tutti i messaggi inseriti nella coda, di controllarne il contenuto e di rispondere opportunamente al client (Utilizzando l'oggetto di tipo PrintWriter).
Cio' che accade e' che gli utenti riescono ad inviare correttamente i loro messaggi, a ricevere l'"ack" ma, nel momento in cui devono ricevere la risposta (Facendo una readLine), ottengono un null (Come se il socket fosse stato chiuso).
Penso che il problema derivi dal fatto che il primo handler (Che e' costituito da un ciclo while(true)) quando passa a trattare la connessione successiva chiude quella precedente e percio' anche il writer registrato nell'oggetto di tipo Received "perde validita'".
Pero' non ne sono sicuro. Anche perche' il thread che si occupa di inviare le risposte riesce ad utilizzare correttamente il PrintWriter senza lanciare eccezioni.
Spero di essermi fatto capire... :rolleyes:
thks :)