
- •Разработка сетевых приложений
- •План
- •Сокеты (socket)
- •Поддержка всех типов протоколов
- •Домены сокетов
- •Семейства протоколов
- •Примеры семейств протоколов /usr/include/linux/socket.h
- •Типы сокетов домена Интернет
- •Функция socket()
- •Привязка сокета к сетевому адресу и порту
- •Функция bind()
- •Формат адреса для семейства протоколов Интернет
- •Порядок байт сети и локальной машины
- •Пример привязки адреса
- •Возможности получения адресов
- •Использование службы доменных имен
- •Режимы сокетов
- •Соединение сокетов
- •Функция connect()
- •Серверный сокет в режиме прослушивания (LISTEN)
- •Сокет в режиме приема входящих соединений (accept)
- •Прием и передача информации
- •Диаграмма работы с
- •Класс sock_1
- •Пример сервера
- •Пример клиента
- •Пример выполнения
- •Синхронное и асинхронное выполнение
- •Проверка наличия данных
- •Удаленные вызовы процедур
- •Extended data representation
- •Использование компилятора RPCGEN
- •Пример описания интерфейсов
- •Создание тела процедуры
- •Создание клиента
- •Компиляция клиента и сервера
- •Пример работы
- •CORBA
- •Процесс создания распределенной программы
- •Пример – описание интерфейса
- •Создание тела функции (test- skelimpl.c)
- •Создание сервера
- •Пример сервера (test- skelimpl.c)
- •Создание клиента (test_client.c)
- •Пример клиента
- •Компиляция сервера и клиента
- •Запуск клиента и сервера
- •Вопросы

Extended data representation
Сериализация данных
Независимость от аппаратной платформы и операционной системы
Предоставляются функции для стандартных типов данных
xdr_int – для целочисленных типов
xdr_opaque – для произвольного массива байт
xdr_string – для строки символов

Использование компилятора RPCGEN
Создание описания интерфейсов
Компиляция описания интерфейсов
Создаются файлы клиентов и серверов на языке С
Создание тела удаленных процедур
Создание клиентских вызовов
Компиляция клиента и сервера

Пример описания интерфейсов
program TESTPROG { version TESTVER {
string PRINT (string) =
1;
}= 1;
}= 0x22222222;
[saa@cluster rpc]$ rpcgen test.x [saa@cluster rpc]$ ls
test.h test_svc.c test_clnt.c test.x

Создание тела процедуры
#include "test.h" #include <stdio.h>
char* responce = "HI! client";
char** print_1_svc(char** arg,struct svc_req * r){ printf("client sent: %s\n",*arg);
return &responce;
}

Создание клиента
#include "test.h" #include <stdio.h>
int main (int argc, char* argv[]){ CLIENT* cl;
char** responce;
cl = clnt_create(argv[1],TESTPROG,TESTVER,"tcp"); if(!cl) {
clnt_pcreateerror(""); return -1;
}
responce = print_1(&argv[2],cl); if(!responce) {
clnt_perror(cl,""); return -1;
}
printf("Server respond with %s\n",*responce); return 0;
}

Компиляция клиента и сервера
[saa@cluster rpc]$ gcc ./print_client.c test_clnt.c -o client
[saa@cluster rpc]$ gcc ./test_svc.c test_print.c -o server

Пример работы
Клиент:
[saa@cluster rpc]$ ./client cluster "Hi server" Server respond with HI! Client
Сервер:
[saa@cluster rpc]$ ./server client sent: Hi server

CORBA
Надстройка над сокетами
Объектно-ориентированные RPC
Упрощается создание распределенных объектно-ориентированных приложений

Процесс создания распределенной программы
Создается описание интерфейсов
Описание интерфейсов компилируется в язык высокого уровня
Создается тело функции сервера
Создается сервер
Создается клиент

Пример – описание интерфейса
module TestModule
{
interface TestInterface
{
string print(in string mes);
};
};
[saa@cluster 1]$ orbit-idl-2 --skeleton-impl test.idl orbit-idl-2 2.8.2 compiling
mode, show preprocessor errors, passes: stubs skels common headers imodule
[saa@cluster 1]$ ls
test-common.c test.h test.idl test-skelimpl.c test-skels.c test-stubs.c [saa@cluster 1]$