Содержание
- 2. План Сокеты Удаленные вызовы процедур CORBA
- 3. Сокеты (socket) Сокеты – аппаратно и протокольно независимый интерфейс для создания сетевых приложений Появились в BSD
- 4. Поддержка всех типов протоколов сокет Домен – семейства адресов и протоколов Тип сокета - протокол
- 5. Домены сокетов Сокеты могут использоваться для обмена По сети В рамках локальной машины В рамках кластера
- 6. Семейства протоколов Домену соответствует набор (семейство) протоколов и адресов Домен сокетов Интернет Семейство протоколов и адресов
- 7. Примеры семейств протоколов /usr/include/linux/socket.h /* Supported address families. */ #define AF_UNSPEC 0 #define AF_UNIX 1 /*
- 8. Типы сокетов домена Интернет Сокеты ориентированные на соединения Потоковый сокет Гарантированная и надежная доставка данных Транспортный
- 9. Функция socket() Создание сокета заданного домена, семейства и протокола int socket(int domain, int type, int protocol);
- 10. Привязка сокета к сетевому адресу и порту Большинство протоколов требуют указания адреса конечной точки коммуникации IP
- 11. Функция bind() int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen); Sockfd – сокет, который привязывается my_addr
- 12. Формат адреса для семейства протоколов Интернет struct sockaddr_in { sa_family_t sin_family; /* address family: AF_INET */
- 13. Порядок байт сети и локальной машины Для передачи информации между машинами все представление данных должно быть
- 14. Пример привязки адреса struct sockaddr_in addr; unsigned long ip_addr_host = 0x0A190511; //10.25.5.11; unsigned long ip_addr_net =
- 15. Возможности получения адресов IP адрес машины В сетевом порядке Любой адрес машины Константа INADDR_ANY Преобразование строки
- 16. Использование службы доменных имен для получения ip адреса struct sockaddr_in addr; struct hostent *gethostbyname(const char *name);
- 17. Режимы сокетов Несоединенный сокет Соединенный сокет Сокет может отправлять данные тому сокету, с которым он соединен
- 18. Соединение сокетов Соединение – установление виртуального канала между двумя сокетами Выполняет клиент Для протоколов ориентированных на
- 19. Функция connect() int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); Соединяет указанный сокет с указанным
- 20. Серверный сокет в режиме прослушивания (LISTEN) Сервер постоянно «слушает» на сетевые соединения Используется специальный режим сокета
- 21. Сокет в режиме приема входящих соединений (accept) Если есть входящие соединения, то серверный сокет должен их
- 22. Прием и передача информации Через два соединенных сокета возможен прием и передача данных в обоих направлениях
- 23. Диаграмма работы с сокетами TCP Сервер socket() bind() listen() accept() Клиент socket() connect() возвращаем соединенный сокет
- 24. Класс sock_1 Разработан для упрощения работы с сокетами Имеет функции с тем же названием, но более
- 25. Пример сервера #include "sock_1.h" #include using namespace std; int main(){ sock_1 sock_listen(PF_INET, SOCK_STREAM); try { if(sock_listen.bind(NULL,34567)
- 26. Пример клиента #include "sock_1.h" #include using namespace std; int main(){ sock_1 connect_sock(PF_INET,SOCK_STREAM); try { if(connect_sock.connect("cluster.univ.kiev.ua",34567) char
- 27. Пример выполнения [saa@cluster socket]$ g++ ./client.cpp ./sock_1.cpp -o client [saa@cluster socket]$ ./client server send HI serverof
- 28. Синхронное и асинхронное выполнение Функции работы с сокетами могут блокироваться connect() accept() read() write() Процесс останавливается
- 29. Проверка наличия данных Функция select() int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval
- 30. Удаленные вызовы процедур Надстройка над сокетами Позволяют просто передавать сложные структуры данных на удаленную машину Выполнять
- 31. Extended data representation Сериализация данных Независимость от аппаратной платформы и операционной системы Предоставляются функции для стандартных
- 32. Использование компилятора RPCGEN Создание описания интерфейсов Компиляция описания интерфейсов Создаются файлы клиентов и серверов на языке
- 33. Пример описания интерфейсов program TESTPROG { version TESTVER { string PRINT (string) = 1; } =
- 34. Создание тела процедуры #include "test.h" #include char* responce = "HI! client"; char** print_1_svc(char** arg,struct svc_req *
- 35. Создание клиента #include "test.h" #include int main (int argc, char* argv[]){ CLIENT* cl; char** responce; cl
- 36. Компиляция клиента и сервера [saa@cluster rpc]$ gcc ./print_client.c test_clnt.c -o client [saa@cluster rpc]$ gcc ./test_svc.c test_print.c
- 37. Пример работы Клиент: [saa@cluster rpc]$ ./client cluster "Hi server" Server respond with HI! Client Сервер: [saa@cluster
- 38. CORBA Надстройка над сокетами Объектно-ориентированные RPC Упрощается создание распределенных объектно-ориентированных приложений
- 39. Процесс создания распределенной программы Создается описание интерфейсов Описание интерфейсов компилируется в язык высокого уровня Создается тело
- 40. Пример – описание интерфейса module TestModule { interface TestInterface { string print(in string mes); }; };
- 41. Создание тела функции (test-skelimpl.c) static CORBA_string impl_TestModule_TestInterface_print(impl_POA_test_test * servant, const CORBA_char * mes, CORBA_Environment * ev)
- 42. Создание сервера Инициализация библиотеки CORBA Создание ORB Создание адаптера объектов Создание объектов Активизация сервера Получение ссылок
- 43. Пример сервера (test-skelimpl.c) int main (int argc, char* argv[]){ PortableServer_POA poa; TestModule_TestInterface server = CORBA_OBJECT_NIL; CORBA_ORB
- 44. Создание клиента (test_client.c) Инициализация библиотеки CORBA Инициализация брокера Получение ссылки на объект Вызов функций
- 45. Пример клиента #include #include "test.h" int main(int argc, char* argv[]){ CORBA_ORB orb=CORBA_OBJECT_NIL; CORBA_Environment ev; TestModule_TestInterface service
- 46. Компиляция сервера и клиента [saa@cluster 1]$ gcc `orbit2-config --cflags` `orbit2-config --libs` test-stubs.c test_client.c test-skels.c test-common.c -o
- 47. Запуск клиента и сервера [saa@cluster 1]$ ./server client sent: Hi server! [saa@cluster 1]$ ./client 'Hi server!'
- 49. Скачать презентацию