Skip to content

Combo-Breaker/rsync

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

отчет

Саркисян Вероника, 143.

Целью данного проекта была реализация утилиты rsync, синхронизирующей множество файлов между двумя серверами. http://wiki.cs.hse.ru/%D0%9A%D0%A1:2015:%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82:rsync

К моменту написания данного отчета мною была написана утилита, выводящая список команд (cp - копировать файл, rm - удалить файл), необходимых для синхронизации двух директорий на разных серверах. Кроме того, в ходе работы над проектом я научилась пользоваться отладчиком gdb и утилитой CMake.

Запущенные на разных серверах, утилиты обмениваются данными через сокеты следующим образом: клиент посылает запрос на список файлов (RequestFiles), сервер получив запрос получает список файлов директории (GetFiles) отправляет его клиенту (SendFileList), тот вычисляет разницу (difference) и выводит команды (cp и rm) на стандартный поток вывода. Для завершения работы клиент отправляет серверу сообщение об успешном завершении (SendOk). За синхронизацию работы сервера и клиента отвечают методы класса Protocol и отнаследованные от него классы Sender и Receiver, за соединение - класс SocketConnection. Сокеты, разумеется, использованы сетевые, но для отладки они запетлены на один и тот же сервер. Данные между сокетами обмениваются в виде фреймов, сериализованных с помощью библиотеки boost::serialization. В каждом фрейме содержится информаци о его длине (первые 4 байта), id сообщения (ОК/получить файлы/принять файлы), и body - сами данные. Подобная организация сообщения между серверами необходима для контроля за целостностью отправленных и полученных данных. Помимо это исполльзованы функции write_all и read_all, которые в отличие от стандратных системных вызовов read и write достоверно запишут весь фрейм. Для обработки исключений использован метод throw runtime_error(string s), вызываемый после каждого системного вызова.

Пример запуска: ./main server ./dir1 ./dir2 - запуск сервера ./main client ./dir1 ./dir2 - запуск клиента

где ./dir1 - путь к синхронизируемой папке клиента, ./dir2 - к папке сервера.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published