Тестовое задание
Почему был выбран протокол TCP на транспортном уровне
TCP предоставляет поток данных, гарантируя, что пакеты придут в порядке отправки и что дубликаты будут устранены. Если пакет был потерян по пути, он будет отправлен заново. Поскольку мы передаем файл с данными, нам важно, чтобы он дошел весь. Если бы мы выбрали UDP в качестве транспортного протокола, то весь этот функционал пришлось бы реализовывать самостоятельно.
Об архитектуре сервера
Подключения принимаются на одном потоке. Для каждого подключения создается отдельный поток, который и отдает файл. Каждый поток работает с блокирующим IO.
О тестировании
В директории test находятся интеграционные тесты.