Как отправлять папки на c # через TCP?

#c# #file #directory #transfer

#c# #файл #каталог #передача

Вопрос:

У меня возникли проблемы с поиском способа отправки целых папок через TCP. Моя первоначальная идея заключалась в том, что отправитель отправляет строку, содержащую путь к заданному файлу, например C://MyFolder/MySubFolder/MyFile затем получатель создает папки и вложенные папки. Затем отправитель продолжает отправку файлов, содержащих их каталог.

Я думаю, само собой разумеется, что это не лучший метод для этого. Есть ли лучший подход?

Редактировать:

Извините, если я был немного расплывчатым. У меня есть приложение для передачи файлов, которое, очевидно, отправляет / получает файлы, и я хочу добавить способ отправки целых папок.

Комментарии:

1. «Есть ли лучший подход?» — FTP?

2. @Mitch Wheat, Да, к сожалению, это должен быть TCP

Ответ №1:

Для этого вам нужен какой-то протокол передачи файлов (например, FTP). Используйте простую в настройке библиотеку FTP-сервера c # (например, эту:http://sourceforge.net/projects/csftpserver /) на стороне отправки и использовать FtpWebRequest на стороне клиента, чтобы получить всю структуру папок.

Ответ №2:

Используйте известные методы архивирования (zip, rar …) и передавайте данные. Извлечение на стороне однорангового узла. Таким образом вы экономите:

  1. Реализация рекурсивного шаблона, подверженного ошибкам.
  2. Ваша пропускная способность

Комментарии:

1. Да, я использовал DotNetZip и заархивировал всю папку целиком, затем извлек ее на получателе, затем удалил zip-файл. Работает отлично и именно так, как должно, НО, к сожалению, это было отклонено. Я не могу заархивировать файлы

2. Почему это было отклонено? Это домашнее задание, которое было отклонено вашим учителем или у вас техническая проблема? В любом случае, если вы собираетесь реализовать это самостоятельно, вам следует написать рекурсивную функцию, которая перебирает папки, отправляет их имена (вам нужен какой-нибудь собственный простой протокол) и файлы внутри.

3. Да, техническая проблема. Если бы я должен был отправить папку с файлом объемом 5 ГБ внутри нее, потребовалось бы много времени и ресурсов для архивирования. На самом деле я делаю то, что вы говорите прямо сейчас, но это довольно сложно, потому что у приложения-получателя уже есть протокол (плохой) для файлов. Я подумываю переделать принимающее приложение.

4. Итак, у вас ограниченные возможности с устаревшим кодом. Используйте протокол для имен файлов / папок. Начните с корневой папки, передайте имя (одноранговый узел создаст папку), а затем перенесите файлы внутрь. Затем перейдите на следующий уровень и рекурсивно проделайте то же самое (это не так просто, как я говорю!). Я рекомендую вид хэширования, чтобы убедиться, что файл передается без повреждения (например, MD5). Вы должны позаботиться о любой НЕЖЕЛАТЕЛЬНОЙ ситуации, такой как проблемы с сетью… предстоит много работы

5. Да, это было действительно непросто. Это было для компании в рамках нашего практикума. Что я сделал, так это сначала отправил структуру папок, затем получатель создает ее, а файлы передаются после. Спасибо!

Ответ №3:

Вы смотрели на существующие протоколы для этой цели? Кажется, вы хотите клонировать FTP, возможно, с механизмом потоковой передачи, таким как tar, между ними.

Ответ №4:

Если вы рассматриваете возможность архивирования / сжатия: вы могли бы взглянуть на класс GZipStream для этого.

http://www.geekpedia.com/tutorial190_Zipping-files-using-GZipStream.html