
- •Разработка сетевых приложений
- •План
- •Сокеты (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)
- •Пример клиента
- •Компиляция сервера и клиента
- •Запуск клиента и сервера
- •Вопросы

Создание тела функции (test- skelimpl.c)
static CORBA_string
impl_TestModule_TestInterface_print(impl_POA_test_test * servant,
const CORBA_char * mes, CORBA_Environment
* ev)
{
CORBA_string retval;
/* |
------ insert method code here |
------ */ |
|
printf("client sent: %s\n",mes); |
|
|
retval = CORBA_string_alloc(512); |
|
|
sprintf (retval,"Hi client"); |
|
/* ------ |
---------- end ------------ |
------ */ |
return retval;
}

Создание сервера
Инициализация библиотеки CORBA
Создание ORB
Создание адаптера объектов
Создание объектов
Активизация сервера
Получение ссылок на объект
Запуск сервера

Пример сервера (test- skelimpl.c)
int main (int argc, char* argv[]){ PortableServer_POA poa;
TestModule_TestInterface server = CORBA_OBJECT_NIL; CORBA_ORB orb = CORBA_OBJECT_NIL; CORBA_Environment ev;
gchar *objref=NULL;
CORBA_char filename[] = "test_service.ior"; FILE* file = NULL;
CORBA_exception_init(&ev); orb=CORBA_ORB_init(&argc,argv,"orbit-local-orb",&ev);
poa= (PortableServer_POA) CORBA_ORB_resolve_initial_references(orb,"RootPOA",&ev); server = impl_TestModule_TestInterface__create (poa, &ev); PortableServer_POAManager_activate(PortableServer_POA__get_the_POAManager(poa, &ev),&ev); objref= CORBA_ORB_object_to_string (orb, server, &ev);
if ((file=fopen(filename, "w"))==NULL)
g_error ("could not open '%s'\n", filename); fprintf(file, "%s",objref);
fclose (file); free(objref);
CORBA_ORB_run(orb,&ev); CORBA_Object_release(server,&ev); CORBA_ORB_shutdown(orb,CORBA_FALSE,&ev); return 0;
}

Создание клиента (test_client.c)
Инициализация библиотеки CORBA
Инициализация брокера
Получение ссылки на объект
Вызов функций

Пример клиента
#include <stdio.h> #include "test.h"
int main(int argc, char* argv[]){ CORBA_ORB orb=CORBA_OBJECT_NIL; CORBA_Environment ev;
TestModule_TestInterface service = CORBA_OBJECT_NIL; CORBA_char filename[]="test_service.ior";
CORBA_exception_init(&ev); orb=CORBA_ORB_init(&argc,argv,"orbit-local-orb",&ev);
FILE *file = NULL;
if ((file=fopen(filename, "r"))==NULL)
g_error ("could not open %s\n", filename); gchar *objref=NULL;
fscanf (file, "%as", &objref);
service = (TestModule_TestInterface) CORBA_ORB_string_to_object (orb, objref,
&ev);
free (objref);
char* mes = TestModule_TestInterface_print(service,argv[1],&ev) ; printf("server sent: %s\n",mes);
return 0;
}

Компиляция сервера и клиента
[saa@cluster 1]$ gcc `orbit2-config --cflags` `orbit2-config --libs` test-stubs.c test_client.c test-skels.c test-common.c -o client
[saa@cluster 1]$ gcc `orbit2-config --cflags` `orbit2-config --libs` test-skelimpl.c test- skels.c test-common.c -o server

Запуск клиента и сервера
[saa@cluster 1]$ ./server client sent: Hi server!
[saa@cluster 1]$ ./client 'Hi server!' server sent: Hi client
