الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشروع جماعي جديد( BitTorrent Client )

مغلق
بدأه bashmohandes في 21 أغسطس 2005 · 33 رد · 4,073 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الحقيقة كنت أتصفح بعض المنتديات الأجنبية و وجدت شرح للProtocol الخاص بشبكة BitTorrent و أعجبتني جداً و فكرت في تصميم client لهذه الشبكة كنوع من التدريب على الTCP/IP Programming و عمل شئ مفيد في نفس الوقت

المهم مبدئياً الموضوع ليس سهلاًُ بالمرة و سيحتاج نوع من التفرغ للقراءة و الدراسة.

فأرجو لمن يرد الإشتراك أن يكن جاداً و خبرته معقولة حتى لا يفشل المشروع و نحبط جميعا كالعادة.

على العموم أنا مازلت في مرحلة الدراسة و لن أتعداها حتى آخر هذا الشهر على الأقل

و سيمر المشروع في مراحل محددة ان شاء الله

1- الدراسة و تجميع المعلومات الأساسية عن الTorrent Network و الNetwork Programming

2- وضع Design بسيط للClient

3- مرحلة التجارب

4- بداية تقسيم المهام كتمهيد لعملية الCoding

5- مرحلة الCoding

6- مرحلة ال Unit Testing

7- مرحلة الIntegration

8- مرحلة الDeployment

و لن أتكلم عن أي تفاصيل لأي مرحلة حتى تنتهي المرحلة الأولى بنجاح إن شاء الله.

مرفق الdocumentation الخاصة بالbitTorrent network و التي كتبها Richard Cohen مصمم الشبكة و مصمم BitTorrent Client.

و في القريب سيكون هناك المزيد من المواقع التي تحمل موضوعات و تفاصيل أكثر.

أرجو إبداء الرأي في الموضوع بموضوعية. و البحث الجاد في الموضوع.

و شكرا

م/ محمد حســام الدين الشـــريف

bittorrentecon.pdf

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#2

جيد جدا و لكن لابد من الاتفاق علي موعد زمني يناسب المشتركين في المشروع

#3

هذا مازال مجرد إقتراح و على أساس تفاعل الأعضاء مع المشروع سيتحدد إذا كان سيستمر أم سيذهب مع الريح كإخوانه من المشاريع

على العموم أنا تستهويني الفكرة و سأحاول بكل طافتي تنفيذها و لو اضطررت لهذا وحدي و لكن العمل الجماعي أفضل.

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#4

هل ممكن تقبلوني معاكم ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ولا لازم خبراء بس !!!!

abo_alzobaer@hotmail.com

#5

يا أخي كل من يجد في نفسه المقدرة على إكمال المسيرة و يتوفر له من الوقت ما يكفي لمتابعة المشروع و لو ساعة يومياً فلا مانع أبداً.

المهم الآن أن نبدأ جميعاً بالقراءة و الدراسة في كل من ال Network Programming بال #C و بالطبع قبل هذا محاولة فهم الBitTorrent Protocol .

و ربما تعدى المشروع مستوى الClient و وصل إالى الTrackers .

سأرفق الليلة إن شاء الله أو غداً بأقصى تقدير المزيد من الملفات التي تحمل تفاصيل أكثر عن البنية الأساسية لشبكة الTorrent و أيضا الFile Structure لملفات الMetaInfo أو الملفات ذات الextention الشهير .torrent

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#6

الرجاء وضع بعض المراجع الموجودة على الانترنت الموجودة لديك في هذا الموضوع هنا

لتتم الأستفادة وتقدير الموضوع حقة

وشكراً

#7
bashmohandes كتب:
يا أخي كل من يجد في نفسه المقدرة على إكمال المسيرة و يتوفر له من الوقت ما يكفي لمتابعة المشروع و لو ساعة يومياً فلا مانع أبداً.

المهم الآن أن نبدأ جميعاً بالقراءة و الدراسة في كل من ال Network Programming بال #C و بالطبع قبل هذا محاولة فهم الBitTorrent Protocol .

و ربما تعدى المشروع مستوى الClient و وصل إالى الTrackers .

سأرفق الليلة إن شاء الله أو غداً بأقصى تقدير المزيد من الملفات التي تحمل تفاصيل أكثر عن البنية الأساسية لشبكة الTorrent و أيضا الFile Structure لملفات الMetaInfo أو الملفات ذات الextention الشهير .torrent

طيب ياريت تحصوا الفريق عشان تتوزع المهام

عشان كل واحد يعرف ايش يسوي وايش يراجع

abo_alzobaer@hotmail.com

#8

هذه صفحة بسطيو تحتوي على الكثير من المعلومات المفيدة

انتظروا المزيد ان شاء الله

wiki_theory_org - Bit Torrent Specification.rar

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#9

بصراحة... هذا أفضل فكرة مشروع جماعي رأيتها في هذا المنتدى حتى الآن. كلما لفيت رأسي هذه الأيام أرى العبارتين "نظام تشغيل" أو "نظام محاسبة". الـBitTorrent برنامج مفيد و المعلومات عنه كثيرة و الكود المفتوح المصدر له أيضاً متوفر.

اعتبرني معكم في هذا المشروع :D

#10

و الله أثلجت صدورنا يا أخ System Down و أتمنا أن نفلح في انشاء client و لو بسيط في أقرب فرصة

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#11

المهمة الأولىTask 1

أولا تعريف بالمهمة..

التعرف على ملفات الTorrent و قراءتها تمهيداً لبداية الدخول الى شبكة Torrent .

ثايناً شرح المشكلة..

ملفات الTorrent تكتب بطريقة تسمى Bencoded Types و هي طريقة تستخدم لكتابة المعلومات في الملفات بطريقة منظمة و بسيطة جداً.

الBencoded Type يحوي أربعة أنواع من المتغيرات و هي الBencoded String و Bencoded Integer و Bencoded List و Bencoded Dictionary

الBencoded String

و هي طريقة كتابة الكلمات النصية في الملف و تكتب هكذا

<string length>:<text>
example
8:arabteam

حيث يمثل الرقم قبل العلامة : عدد حروف النص بعد العلامة

الBencoded Integer

و هي طريقة كتابة الأعداد الصحيحة و تكتب

i<integer value>e
example
i6876e

و هنا يبدأ الرقم بحرف i ليدل على Integer و ينتهي ب e للدلالة على end و بين ال i و الe يكتب الرقم

و هناك بعض الشروط مثل

i-2e صحيح و يعني سالب 2 و لكن i02e خطأ فلا يمكن كتابة الأصفار على يسار الرقم

الBencoded List

و هي تمثل الarrays أو العناصر الموجودة في قائمة واحدة و يمكن أن تحوي الlist أي عدد من العناصر أو ممكن أن تحوي قوائم أخرى أيضاً

l<bencoded elements>e
example
li783e6:arabice

و تبدأ الlist بحرف L و تنتهي بحرف e و بينها توجد العناصر مكتوبة بالطريقة المعتادة لها

الBencoded Dictionary

و هي العناصر التي تمثل الHashtables أو الجداول المرمزة و تتكون من صفوف و كل صف يتكون من عنصرين Key و Value و يجب أن يكون العنصر Key من نوع Bencoded String أما الValue فيمكن أن يكون أي من الأنواع الأربعة

d<string key><value>e 
example
d8:arabteam43:/index.php5:numberi15267ee

و تبدأ الdictionary بحرف d و تنتهي بe و تكتب جميع العناصر متتالية و كل عنصرين متتاليين يمثلان صفاً واحداً ففي المثال سنجد

Key: arabteam ============>Value /index.php

Key: Number ==================> Value: 15267

و هكذا

و يكتب الtorrent file كله باستخدام هذه الطريقة..

ثالثــاً الهدف من الTask

كتابة مكتبة dll لقراءة و كتابة النصوص بطريقة الBencoded Types تمهيداً لتطويرها لكتابة ملفات الTorrents

مدة المهمة:

من 4 إلى 7 أيام من تاريخ اليوم.

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#12

بسم الله الرحمن الرحيم

كم كنت سعيدا حينما رايت هذا الموضوع

لان هذه الفكرة تدور في راسي منذ زمن و لكن كنت اتكاسل عنها

ولكن الان باذن الله تعالي سوف يزداد حماسي و لذلك

اريد ان اشارك معكم في هذا المشروع في الجزء الخاص بالشبكات

بالمناسبة........الاحسن اننا نقوم بحصر الخبرات ثم تقسيم انفسنا الي مجموعات عمل

بحيث هناك مجموعة الشبكات و مجموعة التعامل مع ملفات التورنت و .........

سلام

تم تعديل هذه المشاركة بواسطة Ingm في 26 أغسطس 2005 في 18:23

حكمتي الدائمة.....................................................

ان ما عند الله لا يطلب الا بطاعته

.....................................................................

?who is Ingm

Name: Hasan Adel Hasan

Education: BCs in IS from Faculty of computers & information systems

Mansoura University- 2003

E-mail: hsn_3004@yahoo.com

#13

السلام عليكم ورحمة الله وبركاته.

شكرا يا bashmohandes على هذا المجهود.

أنا قمت بتحميل بعض ملفات الـ torrent. ولكن المشكله أنها تكون تقريبا مشفره بطريقه معينه أو شئ كهذا , اذا كان لديك أو لدى أى أحد من الأخوه أى ملف torrent. يكون مكتوب بطريقه Standard ( أى مطابق للمواصفات الصحيحه لكتابة هذا النوع من الملفات ) كالتي قمت بذكرها... ياريت يضعه لنا هنا لكى يكون مثال واقعي وصحيح نستطيع استخدامه في تجربة الـ dll ( تجربة القراءه منه ) التي سنقوم بانشائها ان شاء الله.

لي استفسار آخر .... ماهو الحد الأدنى من المعلومات الذي يجب أن يتوفر في كل ملف torrent. حتى يمكن القول أن هذا الملف Valid ونستطيع استخدامه في التحميل ؟

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#14

الtorrent files تكتب بنفس الطريقة السابقة و لكن بترتيب معين و لكنها في الآخر تكتب Bencoded بنفس الطريقة السابقة و هذا مثال من ملف Torrent

d8:announce40:udp://tracker.bitcomet.net:8080/announce10:created by13:BitComet/0.5913:creation datei1124998268e8:encoding5:UTF-84:infod6:lengthi125025e4:name16:1st birthday.JPG10:name.utf-816:1st birthday.JPG12:piece lengthi32768e6:pieces80:ر=MT¯×ذ{ط7×،0¸‚Bh(+ RqU¦½9FX…wٹ6مƒ+بvhظ×àB[ظ,[¹rًk‰1¸ےَ(0iµہة‏اےs{:أ7:privatei1eee

تابع معي حرف حرف

ستجد أن أول حرف هو d أي Dictionary و معنى هذا أن ما يتبع هذا الحرف سيكون تابعاً للDictionary و كل عنصرين متتاليين هما عنصرين في صف واحد key و value على الترتيب

ستجد أن أول Key هو الstring 8:announce و مكون من 8 حروف و هي كلمة announce متبوعاً بالvalue و هي string آخر مكون من 40 حرف و هوudp://tracker.bitcomet.net:8080/announce

أما الصف الثاني فالKey هو كلمة created by مكونة من 10 حروف متبوعة بvalue و هي BitComet/0.59 و هو string من 13 حرفاً

و هكذا الصف الثالث مكون من Key من 13 حرف هو creation date و value من نوع integer هي 1124998268

و هكذا حتي ينتهي الملف

فإذا أنجزنا المهمة الأولى بنجاح (إن شاء الله) ستكون عملية قراءة ملفات الTorrent بسيطة جداً

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#15

السلام عليكم

والله فكرة المشروع ممتازه جدا وانا ودي اشارك معاكم بس المهم نريد ارادة حديديه

#16

بما أننا مازلنا في مرحلة الدراسة فأرجو أن يدلو كلٍ بدلوه في المهمة الأولى و يحاول وضع خوارزمية لقراءة الملفات من نوع الTorrent و شكراً

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#17

شكرا يا باشا ... أنا كدا تمام أوي لي استفسار أخير بس ونبدء الشغل بعديه على طول :).

- ما الذي تدل عليه تلك الرموز التي دائما تكون موجوده بعد الـ pieces في أى ملف ::

=MT¯×ذ{ط7×،0¸‚Bh(+ RqU¦½9FX…wٹ6مƒ+بvhظ×àB[ظ,[¹rًk‰1¸ےَ(0iµہة‏اےs{:أ7

هل هى Binary أم ماذا وما فائدتها ؟

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#18

هذه الرموز هي Sha1 Hash لكل piece على حدة و يتكون كل hash من 20 بايت و يكتبوا جميعا متتاليين...

على العموم طنش الحتة دي دلوقتي و إقرأها على أنها String عادي.

المشكلة الوحيدة التي يمكن أن تطرأ من هذا النص المشخبط هو الEncoding و لهذا عند القراءة أو الكتابة من الملف أستخدم Encoding.Default حتى تتجنب أي أخطاء محتملة

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#19

على العموم نريد أن نبدأ عملية تنظيمية إن شاء الله إبتداءً من الشهر القادم حتى لا يضيع مجهود أحد و نوفر الوقت قدر المستطاع

و سنحاول تنظيم الصفوف في شكل فرق أو مجموعات منفصلة لكل مجموعة وظيفة محددة. و سيكون لكل مجموعة منظم أو قائد إذا صح التعبير

و حالياً سأعتبر معتز مشتركاً في المشروع (إذا لم يعترض :lol:) و أرجو أن يعلن كل من يريد الإشتراك في المشروع عن نفسه و يبدأ في قراءة الملفين المرفقين في المشاركة الأولى و المشاركة الثامنة و يحاول استيعاب مايستطيع و بالطبع النقاش هو أهم طريقة للفهم فلا يتردد أحد في طرح أي سؤال.

لله الأمر من قبل و من بعد

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#20

طبعا يا أخ محمد أنا يسعدني ان أنا أشارك معاك في أى حاجه مش شرط مشاريع فقط ;) ... عموما أنا أشارك مبدئيا باذن الله في عمل الـ Reader والـ Writer الخاصين بقراءة وكتابة هذا النوع اللذيذ من الملفات :D.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#21

شئ جميل. أرى أن نبدأ و نفكر في تصميم الكائن الخاص بالملف كبداية. أحد عنده فكرة؟

#22

بسم الله الرحمن الرحيم

اقتباس
و حالياً سأعتبر معتز مشتركاً في المشروع (إذا لم يعترض )

و انا رحت فين ؟؟؟؟؟! :angry:

انا باذن الله تعالي ساكون معكم في مجموعة برمجة الشبكات

لذلك ارجو اجراء عملية تقسيم العمل حتي نبدا

سلام

حكمتي الدائمة.....................................................

ان ما عند الله لا يطلب الا بطاعته

.....................................................................

?who is Ingm

Name: Hasan Adel Hasan

Education: BCs in IS from Faculty of computers & information systems

Mansoura University- 2003

E-mail: hsn_3004@yahoo.com

#23
معتز شمس كتب:
طبعا يا أخ محمد أنا يسعدني ان أنا أشارك معاك في أى حاجه مش شرط مشاريع فقط  ;)  ... عموما أنا أشارك مبدئيا باذن الله في عمل الـ Reader والـ Writer الخاصين بقراءة وكتابة هذا النوع اللذيذ من الملفات  :D.

بالنسبة للReader / Writer فياريت نبدأ أولاً بوضع تصميم مبدئي و لا نتسرع بالتشمير عن سواعدنا في كتابة الأكواد. حتى نستفيد بكل لحظة في المشروع...

بالنسبة للBencoded Types فلقد وضعت Design لها و لكن أحب دائماً مناقشة الأفكار فهذا يحسن المستوى جداً..

على العموم السؤال البسيط هو بعد قراءتك لشرح الBencoded Types حاول أن تستنبط منها الClasses الأساسية و العلاقات بينها

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#24

أنا كنت متأكد يا جماعه أنه سيتوجب علينا القيام بعمل بعض الـ Types الجديده لكل نوع من أنواعه ( Dictionary , Integer , List , String ).

ولكن بعد رؤيتي الى الكثير من ملفات الـ torrent. شعرت أنه لا داعي لذلك ... فكل الملفات تحتوي على الـ Dictionary الأساسي الذي يحتوي على بعض المعلومات ( من أهمها الـ announce ) والذي يمكننا حفظه داخل HashTable عادي.

يوجد في هذا الـ Dictionary ( في آخره دايما ) Value اسمه Info ودائما يكون الـ Key بتاعه عباره عن Dictionary آخر به بعض المعلومات عن الملف , هذه المعلومات يمكننا حفظها هى الأخري في HashTable آخر ليمثل الـ Info بتاع الملف ( Name , Comment , ..... ).

أنا أقترح أن نقوم بعمل كلاس وليكن اسمه مثلا TorrentFileReader يحتوي على بعض الـ Properties والـ Methods ... وطبعا ستكون الداله ()Read هى الكل في الكل في هذا الكلاس.

نقوم بعمل كلاس آخر وليكن اسمه TorrentFile ونجعل الـ ()Read الموجوده في الكلاس السابق تقوم باسترجاع Object جديد من هذا الكلاس ... وتكن أكوادنا تشبه ذلك ::

TorrentFileReader tfReader = new TorrentFileReader("xxx.torrent");

TorrentFile ourTorrentFile = tfReader.Read();

بعد ذلك يمكننا الوصول الى كل ما نحتاجه من معلومات عن الملف من خلال الـ ourTorrentFile Object ... فاذا كنا نريد بعض المعلومات الأساسيه فيمكننا الوصول اليها مباشرة من خلال الـ Properties الخاصه بها ..

string announce = ourTorrentFile.Announce;
DateTime creationDate = ourTorrentFile.CreationDate;
....  .....

وكذلك أيضا اذا أردنا الوصول الى الـ Information الخاصه بالملف ...

long length = ourTorrentFile.Info.Length;
string name = ourTorrentFile.Info.Name;
....  .....

طبعا نحن قمنا باستخدام الـ Properties من أجل الوصول الى المعلومات التي نريدها ولكن , يوجد بعض المعلومات الغير أساسيه والتي يمكن أن تتواجد داخل بعض ملفات الـ torrent ولا تتواجد في ملفات أخرى ( الـ Comment مثلا أو Directed By في ملفات الأفلام أو الميديا ) ولن نستطيع معرفتها وحصرها جميعا أثناء تصميم الكلاس لجعلها Properties.

لذلك يمكننا عمل Index للكلاس TorrentFile و TorrentFile.Info لجلب مانريده من معلومات أثناء الـ Runtime ::

string comment = ourTorrentFile["Comment"].Value;
string director = ourTorrentFile["directed by"].Value;

أما بالنسبه للـ Algorithm الخاصه بالقراءه( ()Read ) التي ستكون موجوده بالطبع في TorrentFileReader يمكننا مناقشتها فورا بعد معرفة آرائكم في مشاركتي هذه اذا رغبتم.

تم تعديل هذه المشاركة بواسطة معتز شمس في 28 أغسطس 2005 في 17:51

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#25

تمام قوي يا ميزو

على العموم أنا كنت بعرض بالصدفة الفكرة على أحد زملائي بالكلية (سابقاً فقد تخرجنا جميعاً هذا العام الحمد لله) و أعجب بالفكرة و سيشارك معنا و سيكون إن شاء الله دعامة قوية للمشروع تضاف للقوى المشاركة حالياًً

غداً إن شاء الله سيكون لنا حديث أطول حول الDesign و سنحاول تنظيم مقابلة على الMSN قريبا لوضع التخطيطات و لكن لا نريد أن يأخذنا الحماس فنحن نعمل بهدوء حتى ننتهي إلى خير إن شاء الله

Sr. Software Development Engineer
Hulu, LLC
My Blogs

هذا الموضوع مغلق.

مواضيع مشابهة