BitTorrent
BitTorrent هو عميل صغير تورنت مكتوب من الصفر في C ++. المكتبة الخارجية الوحيدة المستخدمة هي OpenSSL لحساب تجزئة SHA1. تم اختباره فقط على Ubuntu 18.04 Plateform (Dockerfile المقدمة). على وجه الخصوص ، استخدمت ميزات محددة Linux (على سبيل المثال. Epoll).
كيف تعمل
- أولاً ، تحليل ملف التورنت وهو "bencoded". يحتوي ملف Torrent على معلومات ذات صلة مثل عنوان URL Tracker (UDP أو TCP/HTTP) ، اسم الملف ، حجم الملف ، طول القطعة وما إلى ذلك ...
- اطلب قائمة الأقران من المتتبع. إذا سارت الأمور على ما يرام ، فسيستجيب المتتبع بقائمة من أزواج (IP ، المنفذ).
- ابدأ في تنزيل الملف عن طريق إرسال الرسائل عبر TCP. أولاً ، قم بإجراء "المصافحة" BitTorrent ، ثم استمع إلى رسائل "Have" و "Bitfield" لمعرفة القطع التي يتمتع بها كل نظير. بمجرد تلقي رسالة "Unchoke" ، ابدأ في طلب كتل قطعة.
- لتحديد القطعة التي سيتم طلبها بعد ذلك عن طريق اتصال ، استخدمت قائمة انتظار ذات أولوية تحتفظ بالقطع الأقل طلبًا في الأعلى. عندما أبرز ، أتحقق مما إذا كانت القطعة قد تم استلامها.
- من أجل القراءة من مآخذ TCP متعددة في نفس الوقت في موضوع واحد ، استخدمت منشأة EPOLL (Linux kernel 2.5.44 وما فوق).
- يخزن مؤشر ترابط العامل البيانات المستلمة ويدفعها إلى القرص من وقت لآخر.
- يتم حساب سرعة التنزيل الحالية في مؤشر ترابط عامل منفصل باستخدام صيغة الانحلال الأسي.
العرض التوضيحي

بناء وتشغيل
قم بتشغيل الأوامر التالية:
mkdir build
cd build
cmake ..
make BitTorrent
./source/BitTorrent <torrent_file>
الاختبار
قم بتشغيل الأوامر التالية:
git clone https://github.com/google/googletest.git
mkdir build
cd build
cmake ..
make
بعد بناء المشروع ، توجد ثنائيات الاختبار في البناء/الاختبار/