Update README.md
flavien's git/Projet_JAVA_P2P_STRI2A/pipeline/pr-master This commit looks good Details

pull/84/head
Louis Royer 4 years ago
parent 68446551b4
commit f77ea0ae2b

@ -1,12 +1,8 @@
# Projet Répartition : Téléchargement FTP P2P # Projet Répartition : Téléchargement FTP P2P
## Protocol
Documentation of the protocol used can be found in [doc/protocol.md](doc/protocol.md).
Lien vers le [document original](https://stri-online.net/FTLV/mod/resource/view.php?id=1753). ## Usage
**But** : le but de ce projet est de créer une application répartie en Java de téléchargement de fichier en mode P2P (peer to peer ou poste à poste).
Les étapes suivantes sont conseillées.
# Usage
### Tracker ### Tracker
- Interactive mode: `java tracker.Tracker` - Interactive mode: `java tracker.Tracker`
- CLI Arguments mode: `java trackerP2P.trackerP2P -- <hostname> <PORT>` (default port 6969 (range 6000 -> 6999)) - CLI Arguments mode: `java trackerP2P.trackerP2P -- <hostname> <PORT>` (default port 6969 (range 6000 -> 6999))
@ -19,7 +15,13 @@ Les étapes suivantes sont conseillées.
- Interactive mode: `java clientP2P.ClientP2P` - Interactive mode: `java clientP2P.ClientP2P`
- CLI Arguments mode: `java clientP2P.ClientP2P -- <clientTransportProtocol> <integratedServerHOSTNAME> <integratedServerPORT> <trackerHOSTNAME> <trackerPORT>` (default tracker port 6969 (range 7000 -> 7999) and server port: server 7070 (range 7000->7070)) - CLI Arguments mode: `java clientP2P.ClientP2P -- <clientTransportProtocol> <integratedServerHOSTNAME> <integratedServerPORT> <trackerHOSTNAME> <trackerPORT>` (default tracker port 6969 (range 7000 -> 7999) and server port: server 7070 (range 7000->7070))
## Étape 1 : Téléchargement à la FTP ## Sujet
Lien vers le [document original](https://stri-online.net/FTLV/mod/resource/view.php?id=1753).
**But** : le but de ce projet est de créer une application répartie en Java de téléchargement de fichier en mode P2P (peer to peer ou poste à poste).
Les étapes suivantes sont conseillées.
### Étape 1 : Téléchargement à la FTP
La première étape doit permettre de télécharger un fichier en intégralité d'une machine vers une autre machine de façon similaire aux applications suivant le protocole FTP. La première étape doit permettre de télécharger un fichier en intégralité d'une machine vers une autre machine de façon similaire aux applications suivant le protocole FTP.
@ -28,7 +30,7 @@ Plan de travail :
- Concevoir l'application répartie avec UML ; - Concevoir l'application répartie avec UML ;
- Écrire l'application serveur et l'application cliente. - Écrire l'application serveur et l'application cliente.
## Étape 2 : Téléchargement en parallèle ### Étape 2 : Téléchargement en parallèle
Dans la seconde étape, on permet à un client de télécharger le fichier depuis plusieurs serveurs. Dans la seconde étape, on permet à un client de télécharger le fichier depuis plusieurs serveurs.
Le fichier sera découpé en plusieurs blocs de tailles égales (par exemple 4 Ko) qui seront téléchargés depuis plusieurs serveurs. Le fichier sera découpé en plusieurs blocs de tailles égales (par exemple 4 Ko) qui seront téléchargés depuis plusieurs serveurs.
@ -38,23 +40,23 @@ Plan de travail :
- Modifier le serveur pour gérer l'envoi de n'importe quel bloc d'un fichier ; - Modifier le serveur pour gérer l'envoi de n'importe quel bloc d'un fichier ;
- Modifier le client pour qu'il puisse demander le téléchargement de n'importe quel bloc et re-créer le fichier complet. - Modifier le client pour qu'il puisse demander le téléchargement de n'importe quel bloc et re-créer le fichier complet.
## Étape 3 : Transformation en P2P simple ### Étape 3 : Transformation en P2P simple
Dans cette étape, il n'y a plus de clients ni de serveurs ; les applications sont les deux à la fois. Dans cette étape, il n'y a plus de clients ni de serveurs ; les applications sont les deux à la fois.
Chaque application devra noter de quelle partie du fichier elle dispose. Au démarrage certaines applications auront le fichier complet et les autres aucun bloc. Chaque application devra noter de quelle partie du fichier elle dispose. Au démarrage certaines applications auront le fichier complet et les autres aucun bloc.
Les applications demanderont aléatoirement chaque bloc manquant à n'importe quelle autre application qui renverra soit le bloc soit un message d'erreur. Les applications demanderont aléatoirement chaque bloc manquant à n'importe quelle autre application qui renverra soit le bloc soit un message d'erreur.
## Étape 4 : P2P coordonné ### Étape 4 : P2P coordonné
Dans cette étape, on ajoute un serveur dont le rôle est de maintenir la liste des applications gérant le téléchargement d'un fichier et quel bloc chaque application possède. Dans cette étape, on ajoute un serveur dont le rôle est de maintenir la liste des applications gérant le téléchargement d'un fichier et quel bloc chaque application possède.
Ce serveur coordonnera le téléchargement en précisant à chaque application, à qui se connecter et ce qui y est disponible. Ce serveur coordonnera le téléchargement en précisant à chaque application, à qui se connecter et ce qui y est disponible.
## Étape 5 : P2P coopératif ### Étape 5 : P2P coopératif
Dans cette étape, on doit s'assurer que les applications envoient et reçoivent globalement les même quantités. Dans cette étape, on doit s'assurer que les applications envoient et reçoivent globalement les même quantités.
On essaiera ainsi de désavantager les applications qui ne font que télécharger et n'envoient rien. On essaiera ainsi de désavantager les applications qui ne font que télécharger et n'envoient rien.
## Options : ### Options :
- [ ] Créer une IHM (interface homme machine) Graphique pour les applications avec Swing par exemple. - [ ] Créer une IHM (interface homme machine) Graphique pour les applications avec Swing par exemple.
- [x] Gérer à la fois des communications UDP et TCP. - [x] Gérer à la fois des communications UDP et TCP.
- [ ] Permettre la recherche de fichiers à partir de leur nom ou de toute autre caractéristique. À l'issu de la recherche on devra pouvoir connaître un ensemble d'application possédant le fichier et commencer le téléchargement. - [ ] Permettre la recherche de fichiers à partir de leur nom ou de toute autre caractéristique. À l'issu de la recherche on devra pouvoir connaître un ensemble d'application possédant le fichier et commencer le téléchargement.

@ -1,4 +1,4 @@
# P2P-JAVA-PROJECT version 1.2 (Binary protocol for step 2) # P2P-JAVA-PROJECT version 1.2 (Binary protocol for step 2+)
All strings in the datagram are utf-8 encoded. All strings in the datagram are utf-8 encoded.
@ -13,33 +13,33 @@ x bytes: [(bytes 8-?): PAYLOAD]
``` ```
## Requests and responses codes ## Requests and responses codes
- REQUESTS (msb is 0): - `REQUESTS` (msb is 0):
- `LIST` (0x00) - `LIST` (`0x00`)
- `LOAD` (0x01) - `LOAD` (`0x01`)
- `HASH` (0x02) - `HASH` (`0x02`)
- `DISCOVER` (0x03) - `DISCOVER` (`0x03`)
- `REGISTER` (0x04) - `REGISTER` (`0x04`)
- `UNREGISTER` (0x05) - `UNREGISTER` (`0x05`)
- `RATIO` (0x06) - `RATIO` (`0x06`)
- `UPDATE RATIO` (0x07) - `UPDATE RATIO` (`0x07`)
- `SIZE` (0x08) - `SIZE` (`0x08`)
- RESPONSES (msb is 1): - `RESPONSES` (msb is 1):
- `LIST` (0x80) - `LIST` (`0x80`)
- `LOAD` (0x81) - `LOAD` (`0x81`)
- `HASH` (0x82) - `HASH` (`0x82`)
- `DISCOVER` (0x83) - `DISCOVER` (`0x83`)
- `RATIO` (0x86) - `RATIO` (`0x86`)
- `DENIED` (0x87) - `DENIED` (`0x87`)
- `SIZE` (0x88) - `SIZE` (0x88)
- `VERSION ERROR` (0xC0) - `VERSION ERROR` (`0xC0`)
- `PROTOCOL ERROR` (0xC1) - `PROTOCOL ERROR` (`0xC1`)
- `INTERNAL ERROR` (0xC2) - `INTERNAL ERROR` (`0xC2`)
- `EMPTY DIRECTORY` (0xC3) - `EMPTY DIRECTORY` (`0xC3`)
- `NOT FOUND` (0xC4) - `NOT FOUND` (`0xC4`)
- `EMPTY FILE` (0xC5) - `EMPTY FILE` (`0xC5`)
- `NOT A TRACKER` (0xC6) - `NOT A TRACKER` (`0xC6`)
- `UNKNOWN HOST` (0xC7) - `UNKNOWN HOST` (`0xC7`)
### List ### List
Payload size for list request is always zero. Payload size for list request is always zero.
@ -77,7 +77,7 @@ y bytes: [<FILENAME>]
2 bytes: port used to register on tracker 2 bytes: port used to register on tracker
? bytes: hostname used to register on tracker ? bytes: hostname used to register on tracker
``` ```
Possible responses: Load Response, or Denied Possible responses: Load response, or Denied
### Size ### Size
#### Size request #### Size request
@ -86,7 +86,7 @@ Payload contains
```text ```text
? bytes: filename ? bytes: filename
``` ```
Possible responses: Size response, EmptyFile or NotFound Possible responses: Size response, Empty file or Not found
#### Size response #### Size response
Payload contains Payload contains
@ -106,7 +106,7 @@ y bytes: [<FILENAME>]
z bytes: [ALGO_NAMES requested separated by \n] (ex.: SHA-256, MD5) z bytes: [ALGO_NAMES requested separated by \n] (ex.: SHA-256, MD5)
``` ```
If file does not exists, a NotFound can be responded. If file does not exists, a Not found can be responded.
#### Hash response #### Hash response
Payload contains: Payload contains:
@ -175,7 +175,7 @@ Server block is composed with:
``` ```
#### Not a Tracker #### Not a Tracker
This error is raised when receiving a DISCOVER, a REGISTER, or an UNREGISTER request, This error is raised when receiving a Discover, a Register, or an Unregister request,
but this application is not a tracker. but this application is not a tracker.
#### Ratio Request #### Ratio Request
@ -184,7 +184,7 @@ Contains:
2 bytes: port 2 bytes: port
? bytes: hostname ? bytes: hostname
``` ```
Possible responses: Ratio Response, or Unknown Host Possible responses: Ratio response, or Unknown host
#### Ratio Response #### Ratio Response
Contains: Contains:
@ -205,7 +205,7 @@ Contains:
? bytes: client* hostname ? bytes: client* hostname
* note: used by client to register on tracker * note: used by client to register on tracker
``` ```
Possible responses: No response, or Unknown Host (if client is not registered or server is not registered) Possible responses: No response, or Unknown host (if client is not registered or server is not registered)
Note: client must have verified hash before sending Update Ratio to tracker for each server which participated. Note: client must have verified hash before sending Update Ratio to tracker for each server which participated.

Loading…
Cancel
Save