ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.12.2023
Просмотров: 193
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
1. Классификация возможных архитектур информационных систем
7. Функциональная логика приложений
8. Различная физическая реализация логической модели
3. HTTP-аутификация средствами PHP.
4. Создание GIF-файлов с помощью PHP.
5. Поддержка file upload. Поддержка HTTP cookie. Поддержка баз данных.
Каким образом клиент указывает местонахождение сервера? В Интернете это местонахождение обозначается парой идентификаторов (computer, application)
Здесь computer обозначает компьютер, на котором выполняется серверная программа, а application — конкретную прикладную программу на этом компьютере. При передаче по Интернету эти два значения представлены в виде двоичных чисел. Однако сами пользователи не имеют дела с двоичным представлением — они указывают нужные значения в символьном виде. Пользователи вводят имена и числа, а сетевое программное обеспечение вызывает на выполнение функции, преобразующие символьные значения в соответствующие двоичные значения автоматически.
Принципы обмена данными
В процессе обмена данными между большинством приложений Интернета выполняется одна и та же последовательность операций.
-
Вначале запускается на выполнение серверное приложение и ожидает запроса на установление соединения от клиента. -
Клиент обращается к серверу, указывая его местонахождение и передавая требование приступить к обмену данными. -
Клиент и сервер обмениваются сообщениями. -
После завершения передачи данных и клиент, и сервер сообщают о том, что достигнут конец файла, чтобы прекратить обмен данными.
Рассматриваемая библиотека содержит функции, которые обеспечивают выполнение каждого из этих этапов.
7. Функциональная логика приложений
До сих пор мы обсуждали взаимодействие между двумя приложениями на концептуальном уровне, а теперь подробно рассмотрим конкретную реализацию. Специалисты по вычислительной технике используют термин интерфейс прикладного программирования (АРI — Application Program Interface) для описания набора операций, имеющихся в распоряжении программиста. API-интерфейс определяет параметры, а также смысл каждой операции.
Для демонстрации принципов сетевого программирования мы разработали простой АРI-интерфейс для операций обмена данными по сети. После описания АРI-интерфейса рассмотрим приложения; в которых он используется. В Таблица 1 перечислено семь функций, которые могут быть вызваны в приложении.
Таблица 1 Пример АРI-интерфейса включает семь операций. Этих семи функций достаточно для создания большинства сетевых приложений1.
Операция | Описание |
await_contact | Используется сервером для перехода в режим ожидания запросе клиента на установление соединения |
make_contact | Используется клиентом для передачи серверу запроса на установление соединения |
cname_to_comp | Используется для преобразования имени компьютера в эквивалентное внутреннее двоичное значение |
appname_to_appmun | Используется для преобразования имени программы в эквивалентное внутреннее двоичное значение |
send | Используется клиентом или сервером для передачи данных |
recv | Используется клиентом или сервером для передачи данных |
send_eof | Используется клиентом и сервером после завершения передачи данных |
Неформальное описание АРI-интерфейса
Сервер начинает свою работу с вызова функции Await_contact для перехода в режим ожидания запроса на установление соединения от клиента. Клиент начинает свою работу с вызова функции Make_contact для установления соединения.
После установления соединения клиента с сервером эти две программы могут обмениваться сообщениями с помощью функций send и recv. Оба приложения должны быть запрограммированы так, чтобы каждое из них могло определить, должно ли оно отправлять или получать сообщения, поскольку если оба приложения будут пытаться только получать, но не отправлять сообщения, они будут навсегда заблокированы.
После завершения передачи данных одно приложение вызывает функцию send_eof для отправки другому признака конца файла. В другом приложении функция recv возвращает значение ноль в качестве указания на то, что достигнут конец файла. Например, если клиент вызывает функцию send_eof, то сервер обнаруживает, что после вызова функции recv получено нулевое возвращаемое значение. После того как оба участника обмена данными вызовут функцию send_eof, соединение разрывается.
Принцип действия этого АРI-Интерфейса можно пояснить на простейшем примере. Рассмотрим приложение, в котором клиент устанавливает соединение с сервером, отправляет, единственный запрос и получает единственный ответ. На Рисунок 13 показана последовательность вызовов функций АРI-интерфейса, выполняемых клиентом и сервером при таком сеансе обмена данными.
Рисунок 13 – Последовательность вызовов функций АРI-интерфейса в простейшем сеансе обмена данными. Клиент посылает один запрос и получает один ответ.
Определение АРI-интерфейса
Чтобы АРI-интерфейс был независимым от конкретных операционных систем и сетевого программного обеспечения, для него определены три типа данных, которые используются во всем коде. В Таблица 2 перечислены имена типов и указано их назначение.
Таблица 2 Типы данных, применяемые в примере АР1-интерфейса. На конкретном компьютере эти типы могут быть определены как целые числа конкретного размера.
Имя типа | Описание |
Appnum | Двоичное значение, которое используется в качестве идентификатора приложения |
Computer | Двоичное значение, которое используется в качестве идентификатора компьютера |
connection | Значение, которое используется в качестве идентификатора соединения между клиентом и сервером |
С помощью трех типов данных, приведенных в табл. 3.2, можно точно определить АРI-интерфейс. Для каждой функции ниже приведены объявления в стиле языка С с указанием типа данных каждого параметра, а также типа данных, возвращаемого функцией.
Функция await_contact
Сервер вызывает функцию await_contact для перехода в режим ожидания запроса от клиента на установление соединения.
connection await_contact(аррnum а)
Этот вызов принимает один параметр типа аррnum и возвращает значение типа connection. Параметр задает число, которое обозначает серверное приложение в клиентской программе при передаче на сервер запроса на установление соединения должно быть указано то же число. Сервер использует возвращаемое значение (типа connection) для передачи данных.
Функция make_contact
Клиент вызывает функцию make_contact для установления соединения с сервером.
connection make_contact (computer с, appnum а)
Этот вызов принимает два параметра с обозначением компьютера, на котором работает сервер, и номера приложения, используемого сервером на этом компьютере. Клиент применяет возвращаемое значение типа connection передачи данных.
Функция аррname_to_аррnum
Клиент и сервер используют функцию аррname_to_аррnum для преобразования: имени службы, предназначенного для восприятия человеком, во внутреннее двоичное значение. Имена служб в Интернете стандартизированы (например, www означает службу World Wide Web).
аррnum_appname_to_appnum(char *a)
Этот вызов принимает один параметр строкового типа (в языке С объявление char * применяется для обозначения строки) и возвращает эквивалентное двоичное значение типа аррnum
Функция cname_to_comp
Клиенты могут вызывать функцию cname_to_comp для преобразования имени компьютера, которое предназначено для восприятия человеком, во внутренне двоичное значение.
computer_cname(char *с)
Этот вызов принимает один параметр строкового типа (char *) и возвращает эквивалентное двоичное значение типа computer.
Функция send
Клиент и сервер могут использовать функцию send для передачи данных по сети.
int send(connention con, char *buffer, int length, int flags)
Этот вызов принимает четыре параметра. Первый параметр обозначает соединение, установленное ранее с помощью функции make_contact или await_contact,
второй представляет собой адрес буфера, содержащего данные, предназначенные для передачи, третий параметр задает длину данных в байтах октетах), а четвертый при обычной передаче равен нулю. Функция send возвращает число переданных байтов или отрицательное значение, если возникла ошибка. См. также функцию send_eof, которая применяется для передачи признака конца файла после отправки всех данных.
Функции recv и recvln
И клиент, и сервер могут использовать, функцию геcv для доступа к данным,
поступающим по сети.
int recv( connection соn, char *buffer, int length, int flags)
Этот вызов принимает четыре параметра. Первый параметр обозначает соединение, установленное ранее с помощью функции await_contact, второй представляет собой адрес буфера, в который должны быть размещены данные, третий параметр задает длину буфера в байтах (октетах), а четвертый при обычной передаче равен нулю, функция recv возвращает число, байтов, помещенных в буфер; ноль для обозначения того, что был достигнут конец файла; или отрицательное значение, если возникла ошибка.
В этом примере кода применяется также библиотечная функция recvln, которая повторно вызывает функцию recv до тех пор, пока не будет получена целая строка текста. Определение функции recvln приведено ниже;
int recvln( connection соn, char *buffer, int length)
Функция send_eof
И клиент, и сервер после отправки данных должны вызвать функцию send_eof для передачи второму участнику соединения сообщения о том, что передача данных на этом закончена. На другом конце соединения функция геcv при получении признака конца файла возвращает значение ноль.
int send_еоf(сonnection сon)
Этот вызов принимает один параметр, который указывает соединение, ранее установленное с помощью функции await_contact или make_contact. Функция возвращает отрицательное значение для указания на то, что возникла ошибка; в ином случае — положительное значение или ноль.
Сводные данные по АРI-интерфейсу
В Таблица 3 приведены сводные данные по параметрам функции каждого типа, которые используются в этом примере АР1-интерфейса. В таблице показан тип каждого параметра, а также тип возвращаемого значения.
Таблица 3 Сводные данные по типам параметров и возвращаемым значениям для примера АР1-интерфейса
Имя функции | Тип возвращаемого значения | Тип параметра 1 | Тип параметра 2 | Тип параметров З и 4 |
await_contact | connection | appnum | | |
make_contact | connection | computer | appnum | |
aррname_to_аррnum | appnum | сhаг * | | |
cname_to_comp | computer | сhаг * | | |
send | int | connection | сhаг * | int |
rесv | int | connection | сhаг * | int |
send_eof | int | connection | | |
В следующих разделах приведены примеры прикладных программ, которые показывают, как этот АРI-интерфейс может применяться в клиентском и серверном программном обеспечении для обмена данными2.