Задача. Написать 2 консольных приложения Client.exe и Server.exe под Windows, обменивающихся файлами через UPD сокет с подтверждением по TCP.
-
Сервер. Server.exe Первый параметр - IP, второй номер порта, третий - каталог для хранения файлов. Сервер начинает прослушивать по IP адресу порт и ждет подключения клиента по TCP.
-
Клиент. Client.exe Старт с 5 параметрами. 1 и 2 параметры - IP адрес и порт для подключения к серверу. Третий - порт для отправки UDP пакетов. Четвертый - путь к файлу. Пятый - таймаут на подтверждение UDP пакетов в милисекундах.
-
Взаимодействие сервера и клиента. При старте сервер открывает TCP сокет с IP адресом и портом из стартовых параметров(1 и 2 параметры), берет его на прослушивание и ожидает подключений от клиента. Клиент при старте пытается подключиться к серверу по TCP на IP адрес и порт из стартовых параметров (1 и 2 параметры ) пока не будет установлено соединение. После установления соединения клиент загружает в память файл (3 параметр, размер файла не более 10 Мб.) и отправляет по TCP соединению имя файл и порт UDP на сервер. Далее клиент начинает отправлять файл блоками (Каждый блок данных в udp пакетах должен содержать свой id) udp датаграммами и получать по TCP подтверждения о приеме сервером. В случае если в течении таймаута (5 параметр) не было получено подтверждение на пакет, то пакет по udp отправляется повторно. В случае когда все пакеты подтверждены клиент уведомляет сервер TCP об окончании передачи файла, закрывает TCP соединение, завершает работу. Сервер после установления подключения клиента по ТСP, получения имя файла и порта udp открывает udp сокет и начинает принимать udp пакеты исходящие с IP адреса клиента и порта переданного клиентом. На каждый полученный udp пакет сервер отправляет подтверждение через tcp сокет на клиент. Полученные пакеты хранятся в памяти. После получения от клиента уведомления об окончании передачи (все пакеты подтверждены на клиенте) сервер сохраняет файл в каталог (3 параметр). После отключения клиента сервер должен продолжать работу и ждать еще подключения. Формат посылок по TCP (имя файла, порт и подтверждения пакетов) - на ваше усмотрение формат и нумерация блоков для udp пакетов - на ваше усмотрение