Le but de ce projet est de construire une solution de transfert de fichier pour le mmodèle P2P présenté ci-dessous, et de l'implémenter sur la machine virtuelle Java en utilisant des sockets.
Chaque noeud ne connait que les coordonnés de ses voisins. Il a au moins un voisine et au plus 3 voisins.
Un noeud qui veu s'abonner à l'application doit connaitre les coordonnés d'au moins un noeud sauf le premier.
Chaque noeud est identifié par son IP et son port.
Les communications sont fiables.
Chaque noeud qui s'abonne au réseau reste jusqu'à la fin de l'application.
La communication inter-noeuds s'effectue par inondation. Chaque noeud peut envoyer et recevoir des messages de ses voisins. Ainsi quand un noeud reçoit un message, il le traite et l'envoi à tous ses voisins sauf à l'émetteur. Un noeud peut recevoir trois types de requêtes:
La requête subscribe pour insérer un nouveau noeud dans le réseau.
La requête lookup pour rechercher un ficher
et requete forward pour transferer un fichier déjà trouvé
Lancement d'un noeud:
qd un nouveau noeud n se lance , il dois connaitre au moins l'identité d'un noeud a. Le noeud envoi la requête subscribe au noeud a, qui soit l'accepte en tant que voisin, ou bien transmet la requête à ses voisins.
Des qu'un noeud p accepte le noeud n en tant que voisin, il envoi à l'émetteur sa réponse avec son identité. Quand le noeud a reçoit la réponse, il la transmet au noeud n et ignore les réponses postérieures à cette requête.
Recherche de fichier
Lorsqu'un noeud reçoit la requête lookup sur un fichier, il envoi cette requête à tous ses voisins et cherche si le fichier existe localement. Avant d'envoyer une réponse à l'émetteur, il collecte toutes les réponses de ses voisins et l'envoie à l'émetteur.
Une fois le fichier trouvé sur un noeud, l'utilisateur peut demander son transfert, qui s'effectuera en communication directe entre l'émetteur du fichier et son récepteur.