Удаленный клиент запрашивает у сервера список файлов в некоторой папке. Как лучше организовать передачу списка? Поэлементно с открытием и закрытием поиска, как в винапи, или сплошным буфером с последующим его разбором? Если сплошным буфером, то какова должна быть его структура и алгоритм заполнения/перечисления? Есть еще некоторая сложность в том, что буфер всегда фиксированной длины. Заранее спасибо за дельные советы.
в чем сложность передать сначала клиенту размер буфера, а потом сами данные? клиент, в свою очередь, читает из сокета дворд, выделяет буфер необходимого размера и затем читает в него данные (это на счет буфера фиксированной длины). на счет структуры буфера - самый простой вариант: Код (Text): file1.txt\0file2.txt\0file3.txt\0\0 на клиенте, соответственно: Код (Text): char* file_name = buffer; while(*file_name) { printf("%s\n", file_name); file_name += strlen(file_name); }
Думаю лучше так "|file1|file2|...|fileN|\0", размер буфера удваивать при переполнении. Преаллоцировать можно в расчёте на длину имени файла ~16 символов.
при 1 получении запроса (или создании канала?) создать вспомогательный буфер на все данные и заполнить запросы отправлять с указанием начального смещения ответы отправлять кусками начиная со смещения в запросе после выдачи всех данных в ответ отправить пустую строку одновременно с оправкой конечной пустой строки (или при закрытии канала?) освободить временный буфер. также, если вышел таймаут существования канала, освободить вб и закрвть канал принудительно
Рекомендую заново создать самокат: прокси-API. На сервере крутица нечто что транслирует запросы типа: APICALL("CreateFileA",Arg1*,...) в настоящие API а затем реализует передачу полученных данных назад (если есть). Клиенту нужно всего лишь звать те же самые ойпи с теми же самыми параметрами но через прокси-клиента. Пробуй! (c)
Еще, как вариант, долго не думая можно реализовать что-то похожее на pop3. )) Например так: Код (Text): Подключились cd c:\ -> OK c:\ STAT -> OK n имен общей длиной m byte RETR 1 - > OK "Documents and Settings" namelen=22byte RETR 2 - > OK "Program Files" namelen=13byte RETR 3 - > OK "WINDOWS" namelen=7byte QUIT - > OK hi )))
можно например создать структуру, в этой структуре массив с именами файлов и счетчик сколько файлов в этом массиве и слать структуру.
Ух ты какая клевая идея, а-ля IDispatch и рпк Вряд ли мне подойдет в данном конкретном случае, да и с возвращаемыми параметрами беда... но идея интересная. qqwe Пожалуй, ваш вариант возьму за основу, спасибо.