Лабораторная работа: Создание простейшего сервера в ОС QNX
Адрес сети интернет называется IP-адресом. Если компьютер подключен к сети интернет, то соответственно он имеет IP-адрес. Длина адреса Интернет составляет 4 байта или 32 бита. На одном компьютере может работать несколько приложений, поэтому второй составляющей адреса интернет является порт. В терминологии TCP/IP понятие «порт» очень похоже на IP-адрес. Различия: порт обозначает приложение, а IP-адрес – сетевой компьютер. В адресации Интернет порт занимает 2 байта или 16 бит (тип – integer).
bind(S, local_address, address_length);
где:
– Sэто дескриптор сокета, полученный от функции socket.
– local_address – локальный адрес сокета, являющийся указателем на структуру данных адреса сокета специального вида.
– address_length – указывает длину структуры данных адреса сокета.
Когда сервер желает предложить один из своих сервисов, он связывает сокет с общеизвестным адресом, ассоциирующимся с данным сервером, и пассивно слушает этот сокет. Для этих целей используется вызов функции listen:
listen(S, qlength);
где:
– S – дескриптор сокета.
– qlength – максимальное количество запросов на установление связи, которые могут стоять в очереди, ожидая обработки сервером. Выберем qlength=10.
Когда сервер получает запрос от клиента и принимает решение об установлении связи, он создает новый сокет и связывает его с ассоциацией (в internet домене ассоциация складывается из локального и удаленного адреса и из локального и удаленного порта), эквивалентной «слушающему сокету». Для этого используется вызов функции accept:
New=аccept(S, clientaddr, clientaddrlen);
Сокет, ассоциированный клиентом, и сокет, который был возвращен функцией accept, используются для установления связи между сервером и клиентом.
Когда связь установлена, может начаться процесс передачи данных. Посылать и получать сообщения можно с помощью функций write и read соответственно:
write(S, buffer, sizeof(buffer));
read(S, buffer, sizeof(buffer));
где:
– S – дескриптор сокета;
– buffer – буфер сообщения, указывает на буфер, то есть область памяти, в которой расположены передаваемые данные.
– sizeof(buffer) – длина буфера, то есть количество данных для передачи.
Закрывается сокет с помощью функции close:
сlose(S)
где S – дескриптор закрываемого сокета.
После запуска, данная программа создает простейший Web-сервер, который постоянно запущен. Чтобы обратиться к этому серверу, необходимо в командной строке браузера написать IP адрес компьютера, на котором запущен сервер и порт (в нашем случае порт 3128). На рис. 1 представлен пример обращения к серверу.
Рис. 1
Вывод: В данной лабораторной работе мы научились работать с сокетами и создали простейший Web-сервер в операционной системе QNX.