سلام. برای پیاده سازی چیزی شبیه تورنت شما اول باید با
P2P Network آشنا باشید.
باید در کل بدونید طرز کارش چطوریه و چطوری پیاده سازی میشه، الگوریتم هایی که براش ارائه شده مثل
Kademlia و
Chord رو مطالعه کنید.
پیاده سازی P2P Network کار سختیه و خیلی شرایط باید در نظر گرفته بشه که خب با وجود الگوریتم هایی مثل Kademlia تا حدودی مسیر روشنه و کار رو کمی راحت تر میکنه.
برای مثال یکی از مهمترین مشکلات اتصال مستقیم دو یا چند client / server به هم دیگس...
مثلا فرض کنیم کامپیوتر A من هستم و شما هم کامپیوتر B.
A به مودم خونه وصل شده و ip ایش 192.168.1.36 هست و همینطور B هم به مودم خونگی وصله و ip ایش 192.168.1.128 هست.
اینا LAN IP های ما هست و به درد نمیخورن و مثل این میمونه که A و B پشت اون مودم ها که هر کدوم یک WAN IP دارن قایم شدن...فرض کنیم WAN IP مودم من 31.259.54.123 و برای شما 31.259.60.32.
مثلا A میخواد به google.com وصل بشه و یه درخواستی بفرسته. توی هدر، ip ای که نوشته میشه (فعلا با پورت کاری نداریم، پورت مشکل ما نیست) 192.168.1.128 و وقتی به router میرسه اون ip در واقع re-write میشه و به جاش 31.259.54.123 نوشته میشه. وقتی google.com جواب رو صادر کرد به 31.259.54.123 میفرسته (گوگل چیزی از A نمیدونه) و وقتی به router رسید، router میدونه (یادآوری میکنه) که این کانکشن به A مربوط میشه و درخواست از A فرستاده شده بود و این جوابی که رسیده برای A هست، پس جواب رو میفرسته به A.
اما حالا فرض کنیم خود google.com میخواد به A وصل بشه!!! کاری که میکنه یه درخواست به 31.259.54.123 میفرسته، اما وقتی router اونو دریافت میکنه سوالی که میپرسه اینه که خب این درخواست مربوط به کی میشه؟ ممکنه 100 تا کامیپوتر دیگه به جز A توی شبکه باشه...پس خیلی راحت کانکشن رو drop میکنه.
اما باید چیکار کرد؟ راهی که براش وجود داره
NAT Traversal هست. حالا اینکه انواع و اقسام NAT وجود داره و برای هر کدومم یه تکنیکی جواب میده و رد شدن از firewall و ... بماند.
در کل شما درباره یه سری چیزا مثل
UPD hole punching و
UPnP و
TURN و
STUN و
JXTA مطالعه کنید.
خیلی وارد جزییات نمیشم چون از قبل راهکارهایی براش پیدا شده و برای جاوا هم لایبرری های خوبی براش نوشته شده.
لایبرری هایی که میتونید ازشون استفاده کنید :
JXSE
TomP2P
Hive2Hive
و
ice4j به عنوان یک لایبرری کمکی برای NAT Traversal و STUN.
شما بیشتر تمرکزت رو روی hive2hive بزار چون خودش روی tomp2p پیاده سازی شده و امکانات زیادی بخصوص برای file sharing داره.