Я пытаюсь создать приложение, которое позволяет пользователю передавать файлы/каталоги со своего компьютера на другой компьютер, когда он хочет в LAN ~ TCP/IP без какого-либо вмешательства пользователя-получателя.
Чтобы справиться с этим, я думаю, что Sockets станет лучшей альтернативой. Потому что, если я использую FTP и позволяю файлу FTP-порта приемника постоянно открываться, это будет уязвимостью.
Является ли использование сокетов лучшим выбором?
Если да, то как отправлять каталоги и нетекстовые файлы сбрасывать сокеты?
Когда дело доходит до безопасности, это действительно вопрос "что бы вы ни делали, это будет только безопасно, как сохранение пароля/учетных данных, необходимых для входа". Использование протоколов FTPS или SSH будет зашифровывать трафик между машинами, гарантируя, что никто за пределами не может "видеть", какие файлы (или пароли и т.д.). SSH также имеет функции для определения того, вдруг удаленная машина неожиданно изменилась, поэтому вы можете определить, внедрил ли кто-нибудь "мужчину в середине" атаки (то есть притворяется вашей фактической машиной, на которую вы отправляете)
Что касается отправки нетекстовых файлов, это не должно сильно отличаться от отправки текстовых файлов во всех случаях, о которых я знаю. Если вы используете FTP, вам необходимо установить протокол в "двоичный режим" перед отправкой двоичных файлов, так как некоторые системы в противном случае "изменят" содержимое (например, перевод CR, LF и CRLF последовательностей в соответствие с целевым объектом - и Изображение в формате JPG, безусловно, будет выглядеть довольно странно, когда все байты со значением 0x0A заменены 0x0D 0x0A в файле...).
Разумеется, вы также можете настроить веб-сервер с подходящим программным обеспечением на принимающем компьютере и использовать протокол HTTP/HTTPS для загрузки файлов - с или без защиты паролем (и в HTTPS пароль безопасен, пока никто не "за пределами группы" доверия "имеет доступ к фактическому отправителю/получателю, поскольку трафик зашифрован).
Существует буквально несколько сотен других решений. Не зная БОЛЬШЕ больше о том, какую проблему вы пытаетесь решить, трудно сделать очень конкретные решения.
Вам понадобится какой-то сервер на принимающем компьютере, поскольку обычно нет процесса прослушивания и записи того, что он получает в файловую систему. Имейте практику с netcat (также известный как nc), прежде чем писать слишком много кода. Глянь сюда.