For this project, I implemented a viable BitTorrent client.
- Communicate with the tracker (with support for compact format)
- Download a file from other instances of your client
- Download a file from official BitTorrent clients
- Implement an endgame mode (see "End Game" in [1])
- Implement the rarest-first strategy (see "Piece Downloading Strategy" in [1])