ความผิดพลาด
BitTorrent เป็นไคลเอนต์ torrenting ขนาดเล็กที่เขียนตั้งแต่เริ่มต้นใน C ++ ห้องสมุดภายนอกที่ใช้เพียงอย่างเดียวคือ OpenSSL สำหรับการคำนวณ sha1 hashes ทดสอบเฉพาะบน Ubuntu 18.04 plateform (Dockerfile ให้) โดยเฉพาะอย่างยิ่งมันใช้คุณสมบัติเฉพาะของ Linux (เช่น epoll)
มันทำงานอย่างไร
- ก่อนอื่นแยกวิเคราะห์ไฟล์ฝนตกหนักซึ่งเป็น "bencoded" ไฟล์ Torrent มีข้อมูลที่เกี่ยวข้องเช่นตัวติดตาม URL (UDP หรือ TCP/HTTP) ชื่อไฟล์ขนาดไฟล์ความยาวชิ้นส่วน ฯลฯ ...
- ขอรายชื่อเพื่อนจากตัวติดตาม หากทุกอย่างเป็นไปด้วยดีตัวติดตามจะตอบกลับด้วยรายการคู่ (IP, พอร์ต)
- เริ่มดาวน์โหลดไฟล์โดยส่งข้อความผ่าน TCP ก่อนอื่นทำ bittorrent "handshake" จากนั้นฟังข้อความ "Have" และ "bitfield" เพื่อรู้ว่าชิ้นส่วนที่แต่ละคนมี เมื่อคุณได้รับข้อความ "unchoke" เริ่มขอบล็อกชิ้นส่วน
- ในการพิจารณาว่าจะมีการร้องขอชิ้นใดต่อไปโดยการเชื่อมต่อฉันใช้คิวลำดับความสำคัญที่เก็บชิ้นส่วนที่ร้องขอน้อยที่สุดไว้ด้านบน เมื่อฉันป๊อปฉันตรวจสอบว่าได้รับชิ้นส่วนหรือไม่
- ในการอ่านจากซ็อกเก็ต TCP หลายตัวในเวลาเดียวกันในเธรดเดียวฉันใช้สิ่งอำนวยความสะดวก epoll (เคอร์เนล Linux 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
หลังจากสร้างโครงการแล้วไบนารีทดสอบจะอยู่ใน Build/Test/