Список файлов

Тема в разделе "WASM.A&O", создана пользователем _Juicy, 16 авг 2011.

  1. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Удаленный клиент запрашивает у сервера список файлов в некоторой папке.
    Как лучше организовать передачу списка? Поэлементно с открытием и закрытием поиска, как в винапи, или сплошным буфером с последующим его разбором? Если сплошным буфером, то какова должна быть его структура и алгоритм заполнения/перечисления? Есть еще некоторая сложность в том, что буфер всегда фиксированной длины.
    Заранее спасибо за дельные советы.
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    в чем сложность передать сначала клиенту размер буфера, а потом сами данные? клиент, в свою очередь, читает из сокета дворд, выделяет буфер необходимого размера и затем читает в него данные (это на счет буфера фиксированной длины).

    на счет структуры буфера - самый простой вариант:

    Код (Text):
    1. file1.txt\0file2.txt\0file3.txt\0\0
    на клиенте, соответственно:
    Код (Text):
    1. char* file_name = buffer;
    2. while(*file_name)
    3. {
    4.     printf("%s\n", file_name);
    5.     file_name += strlen(file_name);
    6. }
     
  3. srm

    srm New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2011
    Сообщения:
    189
    Думаю лучше так "|file1|file2|...|fileN|\0", размер буфера удваивать при переполнении. Преаллоцировать можно в расчёте на длину имени файла ~16 символов.
     
  4. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    при 1 получении запроса (или создании канала?) создать вспомогательный буфер на все данные и заполнить

    запросы отправлять с указанием начального смещения

    ответы отправлять кусками начиная со смещения в запросе

    после выдачи всех данных в ответ отправить пустую строку

    одновременно с оправкой конечной пустой строки (или при закрытии канала?) освободить временный буфер.

    также, если вышел таймаут существования канала, освободить вб и закрвть канал принудительно
     
  5. PSR1257II

    PSR1257II New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2011
    Сообщения:
    228
    Рекомендую заново создать самокат: прокси-API. На сервере крутица нечто что транслирует запросы типа:

    APICALL("CreateFileA",Arg1*,...) в настоящие API а затем реализует передачу полученных данных назад (если есть). Клиенту нужно всего лишь звать те же самые ойпи с теми же самыми параметрами но через прокси-клиента. Пробуй! (c)
     
  6. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Еще, как вариант, долго не думая можно реализовать что-то похожее на pop3. ))
    Например так:

    Код (Text):
    1. Подключились
    2. cd c:\   -> OK c:\
    3. STAT    -> OK n имен общей длиной m byte
    4. RETR 1  - >  OK "Documents and Settings" namelen=22byte
    5. RETR 2  - >  OK "Program Files" namelen=13byte
    6. RETR 3  - >  OK "WINDOWS" namelen=7byte
    7. QUIT     - >  OK hi )))
     
  7. Clickgg

    Clickgg New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2011
    Сообщения:
    32
    можно например создать структуру,
    в этой структуре массив с именами файлов
    и счетчик сколько файлов в этом массиве
    и слать структуру.
     
  8. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Ух ты какая клевая идея, а-ля IDispatch и рпк :)
    Вряд ли мне подойдет в данном конкретном случае, да и с возвращаемыми параметрами беда... но идея интересная.

    qqwe
    Пожалуй, ваш вариант возьму за основу, спасибо.
     
  9. Andrzej

    Andrzej New Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2008
    Сообщения:
    11
    EBML, всё уже придумано.