Questo è un sistema peer-to-peer in Java che implementa la condivisione di risorse tra peer attraverso un server master centralizzato.

LABSO_PROCESSI_ANONIMI/
├── P2P_Project/
| └── src/
| ├── resources.json # File di persistenza delle risorse (generato automaticamente)
| ├── download_log.txt # Log dei download (generato automaticamente)
| ├── Client_files/ # Directory per le risorse dei client (creata automaticamente)
│ ├── Master.java # Server master per la gestione della rete
│ └── Client.java # Applicazione client/peer
├── README.md # Questo file
└── DOCUMENTAZIONE.pdf # Documentazione completa del progetto
- Java SE 24 (o versione LTS recente)
- Sistema operativo: Windows, macOS, o Linux
- Connessione di rete (per comunicazione tra peer)
javac src/Master.java
javac src/Client.javajavac src\Master.java
javac src\Client.javaIl master deve essere avviato per primo e rimane in ascolto sulla porta specificata:
java -cp src Master <PORTA>Esempio:
java -cp src Master 9000Output atteso:
Master server avviato sulla porta 9000
File delle risorse: resources.json
In attesa di connessioni client...
----------------
Comandi disponibili:
- listdata -> Lista risorse disponibili
- log -> Log richieste download
- help -> Mostra comandi disponibili
- quit -> Chiudi il server
----------------
>
Ogni client si connette al master specificando IP e porta:
java -cp src Client <IP_MASTER> <PORTA_MASTER>Esempio (su localhost):
java -cp src Client 127.0.0.1 9000Output atteso:
Connesso Peer123 al master su 127.0.0.1:9000
Server peer avviato automaticamente sulla porta 52341
Registrato al master come peer sulla porta 52341
Risorse locali registrate al master.
----------------
Comandi disponibili:
- add <file> --> Condividi un file
- listdata local --> Mostra file locali
- listdata remote --> Mostra file disponibili
- download <file> --> Scarica un file
- help --> Mostra comandi disponibili
- quit --> Esci
----------------
>
-
listdata- Mostra tutte le risorse disponibili nella rete> listdata Risorse disponibili nella rete: - file1.txt: Peer123 Peer456 - file2.txt: Peer789 -
log- Visualizza il log dei download effettuati> log === LOG DOWNLOAD === [2025-09-27 14:30:15] File: file1.txt, da: Peer123, a: Peer456, Event: DOWNLOAD_SUCCESS [2025-09-27 14:31:22] File: file2.txt, da: Peer789, a: Peer123, Event: DOWNLOAD_FAILED - Risorsa rimossa =================== -
help- Mostra l'elenco dei comandi -
quit- Termina il server master
-
add <nome> <contenuto>- Aggiunge una nuova risorsa> add test.txt Contenuto di esempio File 'test.txt' creato/sovrascritto localmente. -
listdata local- Mostra le risorse locali> listdata local Risorse locali: - file1.txt - test.txt -
listdata remote- Mostra tutte le risorse nella rete> listdata remote Risorse disponibili nella rete: - file1.txt: Peer123, Peer456 - file2.txt: Peer789 - test.txt: Peer123 -
download <nome>- Scarica una risorsa da un peer> download file1.txt Trovati 2 peer per file1.txt Download completato da Peer456, dimensione: 1024 bytes >>> DOWNLOAD RIUSCITO da Peer456 < -
help- Mostra l'elenco dei comandi -
quit- Disconnette il client e termina
- Uso di
ReentrantReadWriteLockper gestire l'accesso concorrente alla lista delle risorse - ExecutorService con thread pool per gestire le connessioni multiple
- Gestione seriale delle richieste ai peer (una richiesta per volta)
- Meccanismo di retry automatico in caso di peer non disponibili
- Notifica al master dei peer non raggiungibili
- Aggiornamento automatico della lista risorse
- Fallback su peer alternativi
- Le risorse vengono salvate in
resources.json - I download vengono tracciati in
download_log.txt - Riattivazione automatica delle risorse alla riconnessione
- Le risorse dei peer disconnessi vengono marcate come non disponibili
- Riattivazione automatica alla riconnessione
- Cleanup automatico delle risorse
-
Avvio Master
java -cp src Master 9000
-
Avvio Peer1
java -cp src Client 127.0.0.1 9000 > add documento1.txt Contenuto documento 1 -
Avvio Peer2
java -cp src Client 127.0.0.1 9000 > add documento2.txt Contenuto documento 2 -
Avvio Peer3
java -cp src Client 127.0.0.1 9000 > listdata remote Risorse disponibili nella rete: - documento1.txt: Peer123 - documento2.txt: Peer456 > download documento1.txt Trovati 1 peer per documento1.txt Download completato da Peer123, dimensione: 256 bytes >>> DOWNLOAD RIUSCITO da Peer123 <
Il sistema gestisce automaticamente:
- Peer non raggiungibili durante il download
- Disconnessioni improvvise
- Risorse non più disponibili
- Conflitti di accesso concorrente
- Timeout di rete
- La directory
Client_files/viene creata automaticamente per ogni client - Le porte dei peer vengono assegnate automaticamente dal sistema
- Il master mantiene traccia di tutte le risorse anche quando i peer si disconnettono
- È possibile avviare più client sulla stessa macchina (useranno porte diverse)
- Bufalox
- Alexis1513
- Ilaria-Lee
- Fede046
Progetto didattico per il corso di Laboratorio di Sistemi Operativi - Università di Bologna A.A. 2024-2025