نمایش نتایج 1 تا 6 از 6

نام تاپیک: چطوري با جاوا تورنت را پياده سازي كنيم

  1. #1

    Question چطوري با جاوا تورنت را پياده سازي كنيم

    سلام دوستان،
    من مي خوام يه پكيج با جاوا بنويسم كه به وسيله ي اون بشه يك فايل را در يك شبكه ي داخلي به صورت تورنتي پخش كرد،
    مثلا فرض كنيد يه فايل تو يه كامپيوتر وجود داره، و مي خواهيم هم زمان ده تا كامپيوتر ديگه اون را داشته باشند،
    يه راه اينه كه هر ده تاشون دونه دونه دانلود كنند ( نوشتنش با جاوا راحته يه دانلود منيجر بيش نيست )
    اما يه راه بهترش اينه كه اين ده تا كامپيوتر تو شبكه با مكانيزم تورنت دانلود بكنن،

    قسمت سختش اينجاست كه اين پكيج از هيچ سرور تورنتي مثل بيت تورنت و يو تورنت و... نبايد استفاده بكنه، هرچي لازمه اعم از سرور و كلاينت تورنت بايد با جاوا نوشته بشه،

    كسي ايده اي داره؟

  2. #2

    نقل قول: چطوري با جاوا تورنت را پياده سازي كنيم

    نقل قول نوشته شده توسط djsohrab2007 مشاهده تاپیک
    سلام دوستان،
    من مي خوام يه پكيج با جاوا بنويسم كه به وسيله ي اون بشه يك فايل را در يك شبكه ي داخلي به صورت تورنتي پخش كرد،
    كسي ايده اي داره؟
    زحمتتتون میشه ولی به هر حال این پروژه متن باز و می تونی سورساشو بخونی ببینی چیکار کرده ایده بگیری


    http://bitpower.sourceforge.net/

  3. #3

    نقل قول: چطوري با جاوا تورنت را پياده سازي كنيم

    نقل قول نوشته شده توسط omidbizdotcom مشاهده تاپیک
    زحمتتتون میشه ولی به هر حال این پروژه متن باز و می تونی سورساشو بخونی ببینی چیکار کرده ایده بگیری


    http://bitpower.sourceforge.net/
    سلام، خیلی ممنون،
    تو پکیجی که من می خوام بنویسم سرور بیت تورنت دیگه وجود نداره، (یه شبکه داخلی داریم که به نت وصل نیست ) با این پکیج اپن سورس میشه همچین کاری کرد ؟

  4. #4
    کاربر دائمی آواتار ahmad.mo74
    تاریخ عضویت
    مرداد 1393
    محل زندگی
    تهران
    پست
    437

    نقل قول: چطوري با جاوا تورنت را پياده سازي كنيم

    سلام. برای پیاده سازی چیزی شبیه تورنت شما اول باید با 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 داره.

  5. #5

    نقل قول: چطوري با جاوا تورنت را پياده سازي كنيم

    سوال دوستمون در مورد پیاده سازی P2P APP در شبکه LAN داخلی بود!!!
    اونطوری که فهمیدم نیازی به ارتباط با اینترنت ندارند! و P2P نوشتن وقتی سخت میشه که بخواد ارتباط بروی اینترنت باشد!

    برای اینکار سناریو راحتتر اینه:
    * ابتدا یک وب سرویس ساده بنویسید که سه تا تابع یا صفحه بیشتر ندارد یکی برای زمانی که کاربران برنامه را اجرا میکنند، برنامه آی پی دستگاه را به وب سرویس بفرستد و اعلام کند که وارد شبکه P2P شده است (باید وب سرویس آی پی مورد نظر را به لیست آی پی های دستگاههای موجود در شبکه P2P اضافه کند) و دیگری هم برای زمان خروج از برنامه و برای اعلام خروج از شبکه P2P است که در اینصورت آی پی دستگاه را از لیست دستگاههای موجود در شبکه P2P خارج کند

    * حال اگر کاربری نیاز به لیست Peerها داشته باشد با فرستادن یک درخواست به وب سرویس لیست آنها را دریافت خواهد کرد

    * مورد بعدی اینکه جستجو کردن فایل خاصی بروی شبکه P2P است ، برای اینکار هم برنامه یک درخواست (Query) (آیا فایل X را دارید؟) به تک تک دستگاههای موجود در شبکه P2P ارسال کند و برنامه P2P نیز به این درخواست باتوجه به فایلهایی که کاربر به اشتراک گذاشته جواب دهد. و به همین ترتیب این برنامه میتواند به درخواست دانلود نیز جواب دهد.

    ** توجه دااشته باشید که مواردی که در بالا عنوان شد همه بروی برنامه P2P نوشته خواهد شد (یعنی یک برنامه است و سرور و کلاینت جدا نیستند) یعنی Peerها با هم مستقیما ارتباط برقرار می کنند و این ارتباط نباید از طریق سرور باشد (وب سروری که در بالا عنوان شد صرفا برای پیدا کردن Peerها در شبکه بود و برای راحتتر کردن کار بود البته چون شما میخواهید اینکار را در شبکه داخلی انجام دهید می توانید اینکار را بدون وب سرویس هم انجام دهید فقط یک الگوریتم پیدا کردن Peerها اضافه کنید)
    * در برنامه P2P شما باید سوکت نویسی کنید و به یک پورت خاص گوش دهید و به درخواستهای رسیده جواب دهید

    برای کاملتر شدن مطالب ، شما همین برنامه را بروی اینترنت هم میتوانید استفاده کنید البته باشرایط زیر:
    * وب سرویس را بروی یک سروری که آی پی ولید داشته باشد باید اجرا کنید
    * تمام دستگاهها (Peerها) که برنامه شما را اجرا میکنند باید آی پی ولید داشته باشند در اینصورت شما به بحث NAT Traversal احتیاج نخواهید داشت. ولی همانطور که میدانید در اینترنت بیشتر دستگاهها از IP داخلی استفاده میکنند و همه اینترنت را با واسطه NAT یا فایروال و یا پراکسی استفاده میکنند.

  6. #6

    نقل قول: چطوري با جاوا تورنت را پياده سازي كنيم

    نقل قول نوشته شده توسط ahmad.mo74 مشاهده تاپیک
    سلام. برای پیاده سازی چیزی شبیه تورنت شما اول باید با 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 داره.
    تشکر از جواب بسیار خوبتون برای C#‎کتابخانه ای هم میتونید معرفی کنید.

تاپیک های مشابه

  1. چطوري آموزش آنلاين و پياده سازي كنم؟
    نوشته شده توسط marjane_abi در بخش PHP
    پاسخ: 11
    آخرین پست: دوشنبه 07 تیر 1389, 11:19 صبح
  2. پياده سازي الگوريتم هاي گرافيك با جاوا
    نوشته شده توسط mahdi_dev در بخش برنامه‌نویسی جاوا
    پاسخ: 1
    آخرین پست: یک شنبه 01 آذر 1388, 12:48 عصر
  3. سوال: پياده سازي maxInvalidPasswordAttempts چطوري ؟
    نوشته شده توسط احمد سامعی در بخش ASP.NET Web Forms
    پاسخ: 8
    آخرین پست: چهارشنبه 13 خرداد 1388, 01:53 صبح
  4. پياده سازي tcp/ip
    نوشته شده توسط rezaei_zrr در بخش شبکه و Networking‌
    پاسخ: 0
    آخرین پست: پنج شنبه 19 اردیبهشت 1387, 20:10 عصر
  5. پياده سازي ساختار درختي در asp.net
    نوشته شده توسط samane658 در بخش ASP.NET Web Forms
    پاسخ: 4
    آخرین پست: یک شنبه 15 اردیبهشت 1387, 18:09 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •