En JAVA tu as une plateforme de développement pour le P2P, JXTA si je me souviens bien, mais je ne m'y suis jamais interessé.
Combien de machines prévois tu de relier ainsi ?
Le 1er type de P2P qui me vient en tête est celui du type Napster, avec un serveur centralisé. La conception me paraît assez simple à comprendre : chacun s'y connecte, et le serveur regroupe la liste des fichiers partagés.
Le second étant celui de Kazaa, avec des "supernodes", mais celles-ci n'ont de réel interet que pour les P2P à grande échelle à mon avis. Et c'est vrai que là ça se complique car il faut décreter un certain nombre de règles: qui est supernode et qui ne l'est pas [et en fait, toutes les machines peuvent l'être], comment effectuer les recherches (UDP plutot que TCP ?)...
Après y'a d'autres modèles encore plus complexes comme freenet, mais ça je crois qu'il vaut mieux laisser de côté
Tu devrais pt être commencer par le plus simple, donc un truc de type Napster. Même si ça reste assez orienté client/serveur, puisqu'on sépare les 2 applications.
Sinon, pour avoir qqch plus proche du P2P tu peux minimiser le rôle du serveur (il en faut un de toute façon: pkoi pas un site web) en ne l'utilisant que comme banque de données d'adresses IP. Après, les nodes s'interconnectent.
Je ne sais pas si j'ai répondu à ta question, j'avoue que la programmation réseau ça reste assez théorique pour moi et que je n'ai jamais touché au P2P.