Bittorrent
BitTorrent adalah klien torrenting kecil yang ditulis dari awal dalam C ++. Satu -satunya perpustakaan eksternal yang digunakan adalah OpenSSL untuk menghitung hash SHA1. Diuji hanya pada Ubuntu 18.04 Platform (DockerFile disediakan). Secara khusus, menggunakan fitur spesifik Linux (mis. Epoll).
bagaimana cara kerjanya
- Pertama, parse file torrent yang "bencoded". File torrent berisi informasi yang relevan seperti URL pelacak (UDP atau TCP/http), nama file, ukuran file, panjang potongan dll ...
- Minta daftar peer dari pelacak. Jika semuanya berjalan dengan baik, pelacak akan merespons dengan daftar (IP, port) pasangan.
- Mulailah mengunduh file dengan mengirim pesan melalui TCP. Pertama -tama lakukan "jabat tangan" bittorrent, lalu dengarkan pesan "miliki" dan "bitfield" untuk mengetahui karya apa yang dimiliki setiap rekan. Setelah Anda menerima pesan "Unchoke", mulailah meminta blok karya.
- Untuk menentukan bagian mana yang akan diminta selanjutnya oleh koneksi, saya menggunakan antrian prioritas yang menyimpan potongan yang paling sedikit diminta di atas. Ketika saya muncul, saya memeriksa apakah karya itu telah diterima.
- Untuk membaca dari beberapa soket TCP secara bersamaan dalam satu utas tunggal, saya menggunakan fasilitas Epoll (Kernel Linux 2.5.44 dan di atas).
- Sebuah utas pekerja buffer data yang diterima dan menyiramnya ke disk dari waktu ke waktu.
- Kecepatan unduhan saat ini dihitung dalam utas pekerja terpisah menggunakan formula peluruhan eksponensial.
Demo

Bangun & Jalankan
Jalankan perintah berikut:
mkdir build
cd build
cmake ..
make BitTorrent
./source/BitTorrent <torrent_file>
Pengujian
Jalankan perintah berikut:
git clone https://github.com/google/googletest.git
mkdir build
cd build
cmake ..
make
Setelah membangun proyek, biner uji terletak di build/test/