Bittorrent
BitTorrent es un pequeño cliente de torrenting escrito desde cero en C ++. La única biblioteca externa utilizada es OpenSSL para calcular hashes SHA1. Probado solo en Ubuntu 18.04 PlateForm (proporcionado Dockerfile). En particular, utilizó características específicas de Linux (por ejemplo, Epoll).
¿Cómo funciona?
- Primero, analice el archivo de torrent que está "benEded". El archivo torrent contiene información relevante como la URL del rastreador (UDP o TCP/HTTP), el nombre del archivo, el tamaño del archivo, la longitud de la pieza, etc.
- Solicite la lista de pares del rastreador. Si todo va bien, el rastreador responderá con una lista de pares (IP, puerto).
- Comience a descargar el archivo enviando mensajes a través de TCP. Primero haga el "apretón de manos" de BitTorrent, luego escuche los mensajes "tener" y "bitfield" para saber qué piezas tiene cada compañero. Una vez que reciba un mensaje de "inicio", comience a solicitar bloques de piezas.
- Para determinar qué pieza se solicitará a continuación por una conexión, utilicé una cola prioritaria que mantiene las piezas menos solicitadas en la parte superior. Cuando aparezco, verifique si la pieza ha sido recibida.
- Para leer de múltiples enchufes TCP al mismo tiempo en un solo hilo, utilicé la instalación Epoll (Linux Kernel 2.5.44 y arriba).
- Un hilo de trabajador amortigua los datos recibidos y los arroja al disco de vez en cuando.
- La velocidad de descarga actual se calcula en un hilo de trabajador separado utilizando una fórmula de descomposición exponencial.
Manifestación

Build & Run
Ejecute los siguientes comandos:
mkdir build
cd build
cmake ..
make BitTorrent
./source/BitTorrent <torrent_file>
Pruebas
Ejecute los siguientes comandos:
git clone https://github.com/google/googletest.git
mkdir build
cd build
cmake ..
make
Después de haber construido el proyecto, los binarios de prueba se encuentran en la compilación/prueba/