- О XML-RPC и список вариантов [(.doc)](XML-RPC методичка.doc?raw=true)
- Требуется наличие Debian-подобной ОС (лучше всего две виртуальные машины в одной NAT-сети - прим. mxsleo)
- Необходима установка сборочных библиотек и утилит
- Необходимо установить файлы разработки XML-RPC C
- Предоставлены готовые сервер и клиент (поиск суммы n чисел) для UNIX
- Вы переписываете логику в соответствии с вариантом и собираете программы
- Сначала запускается сервер, а затем клиент
Имя типа |
Пример тега |
Описание типа |
---|---|---|
array |
Массив величин, без ключей |
|
base64 |
Кодированные в Base64 двоичные данные |
|
boolean |
Логическая (булева) величина (0 или 1) |
|
date/time |
Дата и время |
|
double |
Дробная величина двойной точности |
|
integer |
Целое число |
|
string |
Строка символов (в той же кодировке, что и весь XML-документ) |
|
struct |
Массив величин, с ключами |
|
nil |
Нулевая (пустая) величина — это расширение XML-RPC |
Буду предполагать, что виртуальные машины уже установлены и настроены. В противном случае можно обратиться к одному из многочисленных гайдов в интернете или к предыдущим лабораторным работам. В моём случае в качестве клиента и сервера выступают виртуальные машины с установленной Xubuntu 22.04 LTS, объединённые в одну общую NAT-сеть. Дальнейшие действия будут производиться в соответствии с инструкцией в моём личном репозитории: https://github.com/mxsleo/xmlrpc-c_example.
Для начала установим на обе машины сборочные библиотеки и утилиты:
sudo apt install clang gcc git make libcurl4-openssl-dev libssl-dev
Затем скачаем и установим файлы разработки XML-RPC C, также на обе системы:
cd ~/
wget -c https://sourceforge.net/projects/xmlrpc-c/files/Xmlrpc-c%20Super%20Stable/1.54.05/xmlrpc-c-1.54.05.tgz
tar -xvf xmlrpc-c-1.54.05.tgz
cd xmlrpc-c-1.54.05
./configure
make
sudo make install
sudo ldconfig
На этапе загрузки архива исхов XML-RPC C (вторая команда) рекомендую проверить наличие в домашнем каталоге самого архива, в случае ошибки загрузку повторить. После установки можно удалить временные объекты:
rm -rf ~/xmlrpc-c-1.54.05.tgz ~/xmlrpc-c-1.54.05
Как только мы подготовили обе машины, можно приступать к загрузке моих исходников сервера и клиента со сборочной системой на обе виртуалки:
cd ~/
git clone https://github.com/mxsleo/xmlrpc-c_example.git
cd xmlrpc-c_example
Затем нужно собрать программы. Если работа осуществляется на одном компьютере, то выполняем:
make
Иначе, на сервере запускаем:
make server
А на клиенте:
make client
В случае успеха, в каталоге ~/xmlrpc-c_example появятся две программы - unix_server и unix_client. Иначе система сообщит детали об ошибке прямо в терминале.
Теперь, когда сервер собран, его можно запустить:
./unix_server <port>
Например,
./unix_server 8080
Если работа осуществляется на одной машине, его можно запустить в фоновом режиме:
./unix_server <port> &
Чтобы вернуть его с фонового выполнения, можно использовать:
fg
Для остановки используется сочетание клавиш Ctrl+C
. Клиент запустить ещё проще:
./unix_client <server ip> <port>
Например,
./unix_client 192.168.0.10 8080
Если клиент и сервер - это одна машина, используется команда:
./unix_client localhost 8080
В примере дано взаимодействие следующего вида: клиент запрашивает количество чисел, сами числа, посылает их на сервер и просит просуммировать. Сервер возвращает готовую сумму. Можно подробно рассмотреть запросы, воспользовавшись утилитой tcpdump
:
sudo tcpdump -i any -A port 8080
Вся логика сервера прописана в этих строках: описание функции и внесение её в реестр. Логика клиента прописана в этих строках: объявление имени метода и его вызов. Мы можем менять её как угодно, для этого достаточно понимать, что передавать надо данные в формате xmlrpc_value и функцию объявлять по образцу моего сервера. Подробнее про преобразование различных типов к xmlrpc_value и обратно можно почитать в документации: шифрование, дешифрование, литералы. Там же можно получить необходимую информацию о принципе работы программы и найти другие примеры. После изменения кода его необходимо пересобрать (если мы пишем код на хосте, то предварительно закинуть обновлённые файлы в ~/xmlrpc-c_example):
make clean
make
Если будут вопросы, пишите VK.