Лучший способ написать программу клиента FTP для списка файлов на сервере? - PullRequest
2 голосов
/ 17 сентября 2011

Я пытаюсь написать клиент-серверную программу на C в Windows.Целью является получение списка каталогов с сервера.Теперь я пытался разработать клиент-сервер таким образом, чтобы использовать большинство ресурсов.

Одним из способов реализации этого является то, что сервер выполняет один вызов send () для отправки информации об одном файле.Так что, если есть 100 файлов, это делает 100 звонков.Но я чувствую, что это трата сетевых ресурсов.Насколько я знаю, размер буфера для send () или recv () в Windows составляет 8 КБ.Но информация об одном файле вряд ли будет 1 КБ.Так есть ли способ сделать вызов send () для отправки информации о нескольких файлах (информация о файле хранится в структурах. Таким образом, они в основном образуют связанный список)?Может быть, я могу отправить информацию по крайней мере 8 файлов в один вызов ().Это должно уменьшить общее количество вызовов send () до максимума 13.

Так что в принципе есть способ отправить связанный список через send () ??Пожалуйста, дайте мне знать, если вы можете придумать какой-либо альтернативный метод.

Ответы [ 3 ]

1 голос
/ 17 сентября 2011

Хороший вопрос! +1 за это.

Но вы действительно хотите или должны написать свой код для использования Winsock? Есть веские причины для этого - в том числе, что это весело и сложно. Но если вам это не нужно, вы можете рассмотреть возможность использования libcurl ftp library , которая является бесплатной, мультиплатформенной (включая, конечно, win32), просто работает, и может сделать вашу работу намного проще.

0 голосов
/ 17 сентября 2011

TCP - поток байтов. Нет гарантии соотношения 1 к 1 между количеством отправляемых вами предметов и количеством звонков на номер send() (или recv()), которые вам нужно сделать. Это просто не то, как работает TCP. Вы форматируете данные так, как вам нужно, и затем вы продолжаете звонить send(), пока он не сообщит вам, что все данные были отправлены.

Что касается FTP, прочитайте RFC 959 и RFC 3659 , чтобы узнать, как на самом деле работает протокол ftp. До введения команд MLST и MLSD списки каталогов не имели стандартизированного формата. FTP-серверы могут использовать любое форматирование по своему усмотрению. Многие серверы просто передали необработанные данные из собственных команд ОС dir или list. Indy , например, включает в себя несколько десятков парсеров в своем FTP-клиенте для обработки нестандартных списков каталогов.

0 голосов
/ 17 сентября 2011

Единственный известный мне способ сделать это с FTP - это использовать несколько подключений к FTP-серверу.Если это разрешено сервером, может быть повышение производительности списка, поскольку многие обмены протоколами, необходимые для составления списка полного дерева папок, могут выполняться параллельно.

Rgds, Martin

...