Лабораторная работа: Создание простейшего сервера в ОС QNX

Лабораторная работа: Создание простейшего сервера в ОС QNX




👉🏻👉🏻👉🏻 ВСЯ ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻




























































Министерство образования Российской Федерации
Южно–Уральский Государственный Университет
Создание простейшего сервера в ОС
QNX

по курсу: «Автоматизированные системы управления
Цель работы
: Написать программу, создающую простейший Web-сервер.
Опишем функции для работы с протоколом TCP/IP, которые мы использовали в данной программе:
Для создания сокета используется системный вызов socket.
s = socket(domain, type, protocol);
Этот вызов основывается на информации о коммуникационном домене и типе сокета. Для использования особенностей Internet, значения параметров должны быть следующими:
communicationdomain – AF_INET (Internet протоколы).
typeofthesocket – SOCK_STREAM (этот тип обеспечивает последовательный, надежный, ориентированный на установление двусторонней связи поток байтов).
Функция socket создает конечную точку для коммуникаций и возвращает файловый дескриптор, ссылающийся на сокет, или -1 в случае ошибки. Данный дескриптор используется в дальнейшем для установления связи. Для создания сокета типа stream с протоколом TCP, обеспечивающим коммуникационную поддержку, вызов функции socket должен быть следующим:
s = socket(AF_INET, SOCK_STREAM, 0);
Сокет создается без имени. Пока с сокетом не будет связано имя, удаленные процессы не имеют возможности ссылаться на него и, следовательно, на данном сокете не может быть получено никаких сообщений. Коммуникационные процессы используют для данных целей ассоциации. В Internet домене ассоциация складывается из локального и удаленного адреса и из локального и удаленного порта. В большинстве доменов ассоциация должна быть уникальной. В Internet домене связывание сокета и имени может быть весьма сложным, но, к счастью, обычно нет необходимости специально привязывать адрес и номер порта к сокету, так как функции connect и send автоматически свяжут данный сокет с подходящим адресом, если это не было сделано до их вызова. Для связывания сокета с адресом и номером порта используют системный вызов bind:
Привязываемое имя (name) это строка байт переменной длины, которая интерпретируется поддерживаемым протоколом.
Когда сервер желает предложить один из своих сервисов, он связывает сокет с общеизвестным адресом, ассоциирующимся с данным сервисом, и пассивно слушает этот сокет. Для этих целей используется системный вызов listen:
где s это дескриптор сокета, а qlength это максимальное количество запросов на установление связи, которые могут стоять в очереди, ожидая обработки сервером; это количество может быть ограничено особенностями системы. Когда сервер получает запрос от клиента и принимает решение об установлении связи, он создает новый сокет и связывает его с ассоциацией, эквивалентной 'слушающему сокету'. Для Internet домена это означает тот же самый номер порта. Для этой цели используется системный вызов accept:
newsock = accept(s, clientaddr, clientaddrlen);
Сокет, ассоциированный клиентом, и сокет, который был возвращен функцией accept, используются для установления связи между сервером и клиентом.
Прием данных из сети можно осуществлять посредством функций recv() и read(). Функции используются для приема данных из сокета, ориентированного на соединение. Функция read() - это обычная функция чтения, с помощью которой мы читаем из файлов и т.п. По сравнению с ней функция recv() ориентирована на работу исключительно с сокетами и обладает более богатыми возможностями. Рассмотрим подробнее функцию recv(). Она имеет следующий прототип
intrecv(intsockfd, void *buf, intlen, unsignedintflags);
и возвращает при успешном завершении число прочитанных байт, а при ошибке - -1. Первый параметр функции - сокет, из которого нужно прочитать данные, второй - указатель на область памяти, в которую нужно записать принятые данные, третий - сколько байт читать. С помощью четвертого параметра можно управлять поведением функции. Например, указав в качестве флага MSG_PEEK, мы прочитаем данные из начала очереди, но после чтения они останутся в очереди. Разные флаги можно комбинировать, объединяя соответствующие константы посредством операции побитного ИЛИ. Отметим, что по умолчанию только что созданный сокет является блокирующим. В отношении функции recv() это означает, что если в момент ее вызова данных нет, она блокируется до тех пор, пока они не придут из сети.
Посылку данных в сеть можно осуществлять посредством функций send() и write(). Эти две функции используются для записи данных в сокет, ориентированный на соединение. Функция write() - это обычная функция записи, с помощью которой мы пишем в файлы и т.п. По сравнению с ней функция send() ориентирована на работу исключительно с сокетами и обладает более богатыми возможностями. Рассмотрим подробнее функцию send(). Она имеет следующий прототип
intsend(intsockfd, void *buf, intlen, unsignedintflags);
и возвращает при успешном завершении число записанных байт, а при ошибке - -1. Первый параметр функции - сокет, в который нужно записать данные, второй - указатель на область памяти, из которой нужно взять данные, третий - сколько байт записать. С помощью четвертого параметра можно управлять поведением функции. Например, указав в качестве флага MSG_DONTROUTE, мы заставим TCP/IP посылать данные в обход обычных средств маршрутизации непосредственно на сетевой интерфейс получателя, что используется, например, различными диагностическими программами и маршрутизаторами. Разные флаги можно комбинировать, объединяя соответствующие константы посредством операции побитного ИЛИ.
После окончания обмена данными программа должна закрыть сокет(ы), вызвав функцию close().Она имеет следующий прототип:
где S – дескриптор закрываемого сокета.
char bufer[250], buf[]="Server create.";
bind (S, (struct sockaddr*)&serv, sizeof(serv));
New=accept (S, (struct sockaddr*)&serv,&K);
Опишем функции, которые мы использовали в данной программе:
Для создания сокета используется функция socket:
S=socket(protocol_family, socket_type, protocol);
- protocol_family – группа или семейство, к которой принадлежит протокол, например TCP/IP. В нашем случае мы используем коммуникационный домен AF_INET, содержащий Internet протоколы.
- socket_type – тип сокета, задает режим соединения: датаграммный или ориентированный на поток байтов. В нашем случае тип сокета – SOCK_STREAM – обеспечивает последовательный, надежный, ориентированный на установление двусторонней связи поток байтов.
– protocol – определяет протокол, с которым будет работать сокет. В нашем случае для создания сокета с протоколом TCP данный параметр функции устанавливаем равным 0.
Функция bind закладывает способность программы ожидать появления запроса от клиента. Она позволяет связать сокет с адресом и номером порта.
Адрес сети интернет называется IP-адресом. Если компьютер подключен к сети интернет, то соответственно он имеет IP-адрес. Длина адреса Интернет составляет 4 байта или 32 бита. На одном компьютере может работать несколько приложений, поэтому второй составляющей адреса интернет является порт. В терминологии TCP/IP понятие «порт» очень похоже на IP-адрес. Различия: порт обозначает приложение, а IP-адрес – сетевой компьютер. В адресации Интернет порт занимает 2 байта или 16 бит (тип – integer).
bind(S, local_address, address_length);
– Sэто дескриптор сокета, полученный от функции socket.
– local_address – локальный адрес сокета, являющийся указателем на структуру данных адреса сокета специального вида.
– address_length – указывает длину структуры данных адреса сокета.
Когда сервер желает предложить один из своих сервисов, он связывает сокет с общеизвестным адресом, ассоциирующимся с данным сервером, и пассивно слушает этот сокет. Для этих целей используется вызов функции listen:
– qlength – максимальное количество запросов на установление связи, которые могут стоять в очереди, ожидая обработки сервером. Выберем qlength=10.
Когда сервер получает запрос от клиента и принимает решение об установлении связи, он создает новый сокет и связывает его с ассоциацией (в internet домене ассоциация складывается из локального и удаленного адреса и из локального и удаленного порта), эквивалентной «слушающему сокету». Для этого используется вызов функции accept:
New=аccept(S, clientaddr, clientaddrlen);
Сокет, ассоциированный клиентом, и сокет, который был возвращен функцией accept, используются для установления связи между сервером и клиентом.
Когда связь установлена, может начаться процесс передачи данных. Посылать и получать сообщения можно с помощью функций write и read соответственно:
– buffer – буфер сообщения, указывает на буфер, то есть область памяти, в которой расположены передаваемые данные.
– sizeof(buffer) – длина буфера, то есть количество данных для передачи.
Закрывается сокет с помощью функции close:
где S – дескриптор закрываемого сокета.
После запуска, данная программа создает простейший Web-сервер, который постоянно запущен. Чтобы обратиться к этому серверу, необходимо в командной строке браузера написать IP адрес компьютера, на котором запущен сервер и порт (в нашем случае порт 3128). На рис. 1 представлен пример обращения к серверу.
Вывод: В данной лабораторной работе мы научились работать с сокетами и создали простейший Web-сервер в операционной системе QNX.

Название: Создание простейшего сервера в ОС QNX
Раздел: Рефераты по информатике, программированию
Тип: лабораторная работа
Добавлен 02:21:51 23 сентября 2008 Похожие работы
Просмотров: 99
Комментариев: 15
Оценило: 3 человек
Средний балл: 5
Оценка: неизвестно   Скачать

Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.

Лабораторная работа: Создание простейшего сервера в ОС QNX
Примеры Курсовых Работ По Экономике
Курсовая работа: Учет на малых предприятиях
Реферат: Основные матмодели в теории надежности. Выбор числа показателей надежности. Достоверность статистической оценки показателей надежности. Скачать бесплатно и без регистрации
Сочинение На Тему Патриотизм 9.3 Огэ
Реферат: Фердинанд Филипп герцог Орлеанский
Курсовая Работа Ярославль
Контрольная работа по теме Культурно-досуговая деятельность детей
Курсовая работа по теме Комплексный анализ основных вопросов административной ответственности за нарушения таможенных правил
Практическая Работа По Теме Производство
Аргументы К Итоговому Сочинению Совесть
Реферат: Граждане как субъекты РФ. Скачать бесплатно и без регистрации
Презентация На Тему Открытия Александра Флеминга
Реферат Режим Труда И Отдыха Организация Сна
Дипломная работа: Изнасилования и их расследование. Скачать бесплатно и без регистрации
Реферат На Тему Патофизиология Клеточного Деления
Реферат Образовательные Системы
Контрольная работа по теме Понятие государственной должности
Смешные Сочинения Школьников По Литературе
Реферат: История гимна России
Пособие по теме Конфликты в профессиональной деятельности юриста
Реферат: Исследования советского общества в неовеберианской исторической социологии
Реферат: Дифтерия_3
Статья: Анализ профессиональных эталонов технических изобретателей, проведенный по работам А. П. Нечаева

Report Page