Поскольку вы говорите, что ваш клиент не хочет использовать FTP, я предполагаю, что вы будете писать свой собственный протокол. Похоже, что некоторые из этих вопросов больше связаны с функциональными спецификациями, и вы должны представить их своему клиенту, чтобы получить более точные требования для вашего проекта. Имея это в виду, вот идеи / комментарии к некоторым из ваших вопросов:
- Как мы можем гарантировать получение файла в месте назначения? Ваш протокол должен содержать какое-то сообщение ACK / NAK после завершения передачи файла.
- Если файл не был получен в первый раз, мы должны попробовать его снова (даже после перезапуска или отключения питания)? Это больше похоже на функциональное требование, которое должно быть указано вашим клиентом. Хотят ли они надежную передачу, тогда да, я думаю, что какая-то повторная передача будет оправдана (возможно, после некоторого числа сбоев.)
- Как получатель узнает, что полученный файл завершен? Вы могли бы сделать так, чтобы протокол отправлял какие-то данные о файле перед передачей, например, хеш MD5, который мог бы быть проверен клиентом по полученным байтам (и обратно к вопросу 1, отправив ACK / NAK, если хеш совпадает)
- Как мы можем передавать несколько файлов синхронно? Опять же, если вы пишете протокол, просто сделайте его частью спецификации. Например, «Сервер отправит байтовый список с количеством файлов, которые должны быть переданы, после чего следует имя каждого файла, а затем число байтов для каждого файла». Таким образом, ваш сервер может отправить «2, foo.txt, bar.txt, 512, 1024, [1516 байт данных]»
- Как взаимодействовать между несколькими платформами ОС? Я думаю, что вы должны быть более конкретными с этим вопросом, что вы подразумеваете под взаимодействием? Все, что я могу придумать, должно быть абстрагировано Java (т. Е. Доступ к файловой системе, связь с необработанными сокетами и т. Д.)
- А как насчет аутентификации? Что касается надежности, то кажется, что это будет скорее функциональное требование, указанное вашим клиентом.
- Аудит / регистрация? Как указано выше, что хочет клиент?
- Архивирование? Как указано выше, что хочет клиент?