Salve a tutti, sto progettando per l'università un semplice programmino di file sharing dove il server ha la sola funzione di raccogliere la lista di tutti i file e associarli ai client che li detengono.
Sono alla prima esperienza Java (almeno a certi livelli) e vorrei suggerimenti sulla progettazione della cosa perchè sono arrivato ad un punto morto:
Il server dovrebbe accettare connessioni da vari client. Nel momento in cui accetta una nuova connessione il server genera un nuovo thread che apre una connessione con il client, mentre il thread originale torna a bloccarsi sulla accept() di un oggetto serversocket. Fin qui tutto ok.
Il client, appena è connesso al server gli invia la lista dei suoi file, e il thread del server relativo a quel client quando riceve la lista aggiorna la struttura dati (condivisa tra tutti i thread perchè dichiarata nel thread principale). Fin qui nessun problema almeno a livello teorico perchè di codice non ne ho ancora scritto granchè.
Il problema nasce dal fatto che quando uno di questi thread aggiorna la struttura dati, gli altri thread dovrebbero poterlo sapere per leggerla e inviarne il contenuto ai loro rispettivi peer.
E qui mi stoscervellando da ore con soluzioni che poi si rivelano errate.
In particoalre non riesco a capire se wait() e notify() possono fare al caso mio.. la prima idea era stata quella di creare un secondo thread figlio del primo in modo che il secondo thread si blocchi sulla read, e il primo, detentore dell'output stream, si blocci con una wait in attesa di essere risvegliato d aun lettore.. ma non ho capito se un thread lettore può risvegliare tutti i therad scrittori che a quel punto semplicemente e stupidamente leggeranno tutti la struttura dati e la sputeranno tutti nel proprio outputstream.
Può essere che sia una banalità e non me ne rendo conto, abbiate pazienza... se qualcuno ha idea di che pesci prendere, lo dica
grazie!
![]()