2012-06-01 5 views
0

Я пытаюсь отправить структуру дерева каталогов через TCP. Дерево возможно в подкаталогах. Я не хочу отправлять фактическое содержимое, но более или менее отправляю листинг в один поток байтов. Каков наилучший способ сделать это?Каков наиболее эффективный способ передачи дерева каталогов через tcp? C++

+4

Определите «наилучший» .. –

+0

Задайте себе вопрос: какой эффективный способ собрать это дерево в массив байтов. После этого было бы легко. –

+0

Я бы не согласился с этим. Ему нужно будет беспокоиться о контенте, упаковке байта и т. Д., Если он использует байтовый буфер для передачи. Это прекрасно, если он это понимает, хотя :) это, безусловно, будет самым эффективным способом измерения размера данных. –

ответ

0

Я думаю, что ваш лучший выбор для эффективности (я собираюсь предположить, что вы хотите, чтобы вы искали решение, которое потребует отправки небольшого количества байтов относительно других решений), читаемость и переносимость - это что-то вроде JSON ,

{"dir":"/","children": 
    [{"dir":"bin","children": 
    [{"file":"bash"}, 
     {"file":"csh"}] 
    }, 
    {"dir":"home","children":null}]} 
0

«Лучший» имеет множество интерпретаций в зависимости от сценария. Если вы можете подтвердить формат, который упростит ваши клиенты (приемники TCP) использовать ваши данные, то это, вероятно, хорошая идея.

Как правило, я считаю, что лучше всего быть наиболее понятным способом. Например, представление XML было бы хорошо, потому что XML повсюду - все это знают (или должны). Есть миллион библиотек COTS, которые его обрабатывают, и хорошо известны.

XML также по своей сути может содержать объекты, содержащие другие сущности, и по умолчанию имеет родительский/дочерний элементы между узлами, поэтому формат будет очень хорошо отражать структуру каталогов.

Недостатком xml является то, что он очень подробный. Вы могли бы построить формат плоского файла, который был бы намного меньше, если вы захотите справиться с дополнительной сложностью (и размер камеры на самом деле имеет значение в сетевом приложении). Если вы собираетесь использовать представление с плоским файлом, подумайте о том, как вы структурируете данные в одной таблице базы данных (имя, файл/папка, родительский каталог и т. Д.).

1

Чтобы отправить дерево, просто рекурсивно выполнить следующие действия:

Отправить корень, а затем его детей.

Смежные вопросы