- •Министерство общего и профессионального о образовании рф
- •Санкт-Петербургский государственный электротехнический
- •Университет (лэти)
- •Взаимодействие сетевых приложений
- •Введение
- •1.2. Операции с сокетом
- •Int socket(int family, int type, int protocol).
- •Int bind(int fd, struct sockaddr *umyaddr, int addrlen),
- •Int uname(struct utsname * buf);
- •Int getpeername(int fd, struct sockaddr * umyaddr, int * usockaddr_len),
- •Int listen(int fd, int acklog),
- •Int write(int fd, char*ubuf, int len);
- •Int send(int fd, void * buff, int len, unsigned flags);
- •Int sendto(int fd, void * buff, int len, unsigned flags, struct sockaddr*addr, int addr_len);
- •Int read(int fd, char *ubuf, int size);
- •Int recv(int fd, void * buff, int len, unsigned flags);
- •Int recvfrom(int fd, void * buff, int len, unsigned flags, struct sockaddr * addr, int * addr_len).
- •Int select(int numfds, fd_set * readfds, fd_set*writefds, fd_set*exeptfds, struct timeval*timeout).
- •Int id_socket, res_select;
- •1.4 Задания к лабораторной работе 1
- •Лабораторная работа 2 построение серверных и клиентских программ с использованием компилятора rpcgen
- •2.1. Описание интерфейса удаленной процедуры
- •Void main (int argc, char* argv[])
- •Int имя_функции (caddr_t resp, struct sockaddr_in * server_addr);
- •Int prtnt_result(caddr_t out, struct sockaddr_in *s)
- •Void main( )
- •197376, С.-Петербург, ул. Проф. Попова, 5
Министерство общего и профессионального о образовании рф
Санкт-Петербургский государственный электротехнический
Университет (лэти)
Взаимодействие сетевых приложений
Методическое указания
к лабораторным работам
по дисциплинам
“ОРГАНИЗАЦИЯ ВЫЧИСЛДИТЕЛЬНЫХ ПРОЦЕССОВ”
И
“РАЗРАБОТКА СЕТЕВЫХ ПРИЛОЖЕНИЙ”
Санкт-Петербург – 1999
УДК 681.3
Взаимодействие сетевых приложений: Методические указания с лабораторным работам по дисциплинам “Организация вычислительный процессов” и “Разработка сетевых приложений” /Сост.: Г.В.Разумовский, В.С.Фомичев СПбГЭТУ (ЛЭТИ}. СПб., 1999. 32 с.
Приводятся описания лабораторных работ, связанных с изучением способен сетевого взаимодействия приложений, выполняющихся в рамках операционной системы LINUX. В лабораторных работах основное внимание уделяется системным вызовам Для обмена данными через сокеты и механизму запуск удаленных процедур.
Предназначены для студентов специальности 220100 и магистров по направлению 552800 “Информатики и вычислительная техника”.
Издание осуществлено при поддержке Федеральной целевой программы “Государственная поддержка интеграции высшего образования и фундаментальной науки” (проект № 142 - "Интегрированная система подготовки кадров и фундаментальных научных исследований в области информатики”.
Утверждено
Редакционно – издательским советом университета
в качестве методических указаний
СПбГЭТУ (ЛЭТИ), 1999
Введение
При разработке приложений, работающих в сети, необходимо знать способы организации их взаимодействия и уметь реализовать эти способы в конкретной ОС. Основными формами сетевого взаимодействии являются: обмен данными между параллельно работающими приложениями и запуск одним приложением другого с последующей передачей результатов выполнения вызывающей программе. Вторая форма взаимодействие получила название удаленный вызов процедур. Средства реализации обеих форм взаимодействия имеются во всех ОС, но в каждой ОС свой протоколы обмена и программный интерфейс, обеспечивающий связь между приложениями. Наиболее известным и поддерживаемым всеми ОС является протокол TCP/IP. Поэтому в лабораторных работах рассматривается программный Интерфейс доступа к протоколам ТCP/IP, а в качестве среды разработки сетевых Приложений - ОС LINUX, которая свободно распространяется и наиболее доступна в учебном процессе.
В ОС UINDX базовым механизмом для организаций сетевого взаимодействия программ являются сокеты. На основе сокетов реализуются такие протоколы прикладного уровня, как удаленный терминальный доступ, копирование удаленных файлов, передача почтовых сообщений и удаленный вызов процедур. Поэтому в первой лабораторной работе изучается программный интерфейс сокетов и способы передачи данных, которые могут быть реализованы с их помощью.
Вторая лабораторная работа посвящена построению клиентских и серверных программ с помощью компилятора rpcgen, позволяющего сократить затраты времени на разработку программ и уменьшить вероятность появления ошибок. В его состав входит библиотека XDR (eXternal Data Representation), которая содержит функции для преобразования различных типов данных в машинно-независимый вид, позволяющий производить обмен данными между разнородными системами. Компилятор автоматически генерирует модули, отвечающие за формирование и передачу сообщений между клиентом и удаленным сервером. Пользователи должны знать только правила написания интерфейсов удаленных процедур, серверных функций и их вызовов. Изучение этих правил и знакомство с системными функциями, поддерживающими механизм вызова удаленных процедур, является основной задачей дайной лабораторной работы.
В методических указаниях приводятся основные сведения, знакомство с которыми поможет студентам выполнить задания, имеющиеся в каждой работе. Для их выполнения необходимо знать язык С и некоторые системные функции ОС LINUX.
-3-
Лабораторная работа 1
ВЗАИМОДЕЙСТВИЕ ПРОЦЕССОВ ЧЕРЕЗ СОКЕТЫ
Цель работы: изучение программного интерфейса сокетов и получение практических навыков по его использованию или сетевого обмена данными.
Понятие сокета
Сокет – это объект ОС, через который можно передавать и принимать данные от процессов независимо от того, выполняется она на одном или разных компьютерных сетях. Сокет, также как и файл, характеризуется номером дескриптора и к нему применены файловые операции. Но в отличие от файла сокет существует лишь до момента, пока на него ссылается хотя бы один из процессов. Сокет передается по наследству и с ним могут быть связаны один или несколько процессов. Сокеты, имеющие одинаковые схемы адресации и семейство протоколов, группируются в домены. В системе LINUX поддерживается следующие домены:
AF_UNSPEC 0 /*не специфицированный*/
AF_UNIX 1 /*для взаимодействия процессов внутри одной ЭВМ*/
AF_ INET_ 2 /*для взаимодействия через локальную сеть по протоколу TCP/IP*/
AF_ AX25 3 /*для взаимодействия аппаратному интерфейсу Х.25*/
AF_IPX 4 /*для взаимодействия через сеть по протоколу IPX*/
Поскольку в лабораторных работах будет использоваться только домен AF– INET, то в дальнейшем приводится описание параметров и операций с сокетами только для этого домена.
В рамках одного домена сокеты могут иметь различный тип и протокол обмена. Тип сокета определяет способ передачи данных между процессами. В системе определены следующие типы сокетов:
SOCK_STREAM 1 /*потоковый сокет*/
SOCK_DGRAM 2 /*дейтаграммный сокет*/
SOCK_RAM 3 /*исходный сокет*/
SOCK_RDM 4 /*надежная передача сообщения*/
SOCK_SEQPACKET 5 /*последовательные пакеты*/
Потоковый сокет обеспечивает надежную поставку данных с сохранением последовательности передаваемых данных. Перед началом обмена данными через такой сокет процессы должны установить канал связи.
Дейтаграммный сокет не гарантирует надежную передачу и получение данных в той последовательности, в какой они посылались, но этот способ передачи более быстрый, поскольку для него не требуется сложные установочные операции. Этот тип сокетов не требует предварительной установки
-4-
соединения, адреса отправителя и получателя передаются с каждым сообщением.
С помощью последовательных пакетов можно организовать передачу сообщений фиксированный длинны с предварительным установлением соединением.
Исходные сокеты предназначены пакетов только для суперпользователей. Они используется, когда нужно создать новый протокол связи или получить доступ к параметрам существующего протокола.
Одна из сильных сторон программного интерфейса сокетов состоит в том, что в нем заложены средства для работы с различными сетевыми протоколами. Например, для домена AF_INET определены следующие типы протоколов:
IPPROTO_IP = 0, /* Dummy protocol for TCP*/
IPPROTO_ICMP = 1, /* Control Message Protocol*/
IPPROTO_IGMP = 2, /* Internet Gateway Management Protocol */
IPPROTO_IP IP = 4, /* IPIP tunnels (older KA9Q tunnels use 94)*/
IPPROTO_TCP = 8, /* Transmission Control Protocol*/
IPPROTO_PUP = 12, /* Exterior Gateway Protocol */
IPPROTO_UDP = 17, /* PUP protocol*/
IPPROTO_IDP = 22, /* User Datagram Protocol */
IPPROTO_PUP = 12, /* XNS IDP protocol*/
IPPROTO_RAW = 255, /* Raw IP packets*/
Для каждой допустимой комбинации домен - тип сокета в системе поддерживается умолчание на используемый протокол. Так, например, для домина AF_INET услуги виртуального канала выполняет протокол транспортной связи IPPROTO_TCP, а функции дейтаграммы – пользовательский дейтаграммный протокол IPPROTO_UDP: Для сокетов типа SOCK_RAW и SOCK_PACKET обязательно должен быть указан номер протокола суперпользователя.