Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Методы, которые реализуют API-интерфейс сокетов



Метод socket создает объект типа сокет и возвращает его:

socket.socket(af, type, [protocol]) -> sock_obj

Параметр af указывает, какое семейство протоколов будет использоваться с сокетом. Чаще всего используется значение AF_INET – домен Internet. Параметр type, указывает тип связи, который будет использоваться в сокете. Наиболее распространенными типами являются потоковая передача с установлением логического соединения (которая задается значением SOCK_STREAM) и блочная передача без установления логического соединения (которая задается значением SOCK_DGRAM). Дальнейшая работа с сокет-объектом проводится вызовом его методов.

Метод close сообщает операционной системе, что программа завершила использование сокета. Вызов имеет форму:

close()

Сразу после создания сокет не имеет ни локального, ни удаленного адреса. В сервере для задания номера порта протокола, через который сервер будет принимать запросы на установление соединения, используется метод bind. Вызов метода bind имеет вид:

bind(address)

Вызов этой процедуры представляет собой запрос назначить сокету конкретный номер порта протокола. Параметр address здесь и далее в главе соответствует адресной информации, принятой в данной адресной семье. Для сокетов, работающих на основе IP, адрес – пара (host, port), где host указывает IP-адрес хоста, а port – порт.

После задания номера порта протокола сервер должен передать операционной системе команду перевести сокет в пассивный режим, чтобы он мог применяться для получения запросов на установление соединения от клиентов. Для этого сервер вызывает метод listen, который принимает один параметр:

listen( queuesize)

Параметр queuesize указывает длину очереди запросов сокета.

Сервер, в котором используется транспортный протокол с установлением логического соединения, должен выполнить метод accept для приема следующего запроса на установление соединения. Если в очереди находится хотя бы один запрос, метод accept немедленно выполняет возврат; если же в очередь не поступило ни одного запроса, то система блокирует сервер до тех пор, пока один из клиентов не сформирует запрос на установление соединения. Метод accept имеет следующую форму:

accept() -> newsock, address

Процедура accept создает новый сокет-объект для соединения и возвращает его, а так же адресную информацию о клиенте address вызывающей процедуре. Сервер использует новый сокет для обмена данными с клиентом и закрывает сокет после завершения работы. Первоначальный сокет сервера остается неизменным: после завершения обмена данными с клиентом, сервер использует первоначальный сокет для приема следующего запроса на установление соединения от клиента.

В клиентских программах для установления соединения с конкретным сервером применяется метод connect. Вызов этого метода имеет форму:

connect(address)

Параметр address указывает адрес сервера.

И клиенты, и серверы должны передавать информацию. Обычно клиент посылает запрос, а сервер возвращает ответ. Если сокет подключен, для передачи данных может применяться метод send. Метод send имеет два параметра, причем один из них необязательный:

send(data[, flags]) -> bytes

Параметр flags состоит из специальных констант, с помощью которых можно запрашивать специальные опции. Метод возвращает количество переданных байтов.

Метод sendto позволяет клиенту или серверу передавать сообщение с использованием неподключенного сокета; он требуют указывать адрес назначения. Он имеет следующую форму:

sendto(data[, flags], address) -> bytes

Эта процедура отличается от процедуры send только последним параметром, который задает адрес назначения.

И клиент, и сервер должны получать данные, переданные другим участником соединения. В API-интерфейсе сокетов предусмотрено несколько методов, которые могут использоваться для этой цели. Например, в приложении может быть выполнен метод recv для получения данных из подключенного сокета. Этот метод имеет следующую форму:

recv(buffsize[, flags]) -> data

Параметр buffsize определяет максимальный объем порции данных, получаемых за один вызов метода. Необязательный параметр flags аналогичен этому же параметру методов send и sendto. Метод возвращает данные, полученные из сокета.

Если сокет не подключен, его можно использовать для получения сообщений от произвольного набора клиентов. В таких случаях система возвращает адрес отправителя наряду с каждым входящим сообщением:

recvfrom(buffsize[, flags]) -> data, address

Параметры соответствуют параметрам процедуры recv. Кроме данных, полученных из сокета, метод recvfrom регистрирует адрес отправителя точно в такой же форме, в какой его принимает метод sendto.

Схема взаимодействия сервера с клиентом через интерфейс сокетов приведена на рисунке 2.2.

Задание к лабораторной работе

Написать простейшее приложение клиент-сервер с одним сервером и одним клиентом используя API-интерфейс высокого уровня. Пример интерфейса приведен в приложении.

Сервер начинает свою работу с ожидания запроса от клиента на соединение. Клиент устанавливает связь с сервером и посылает набор данных, введенный пользователем, на сервер. Сервер получает от клиента набор данных, выполняет указанные в варианте действия и возвращает клиенту результат. После этого сервер снова переходит в состояние ожидания запроса на соединение. Клиент, получив ответ с сервера, распечатывает его на экране и прекращает свою работу.


Варианты заданий

1. Клиент пересылает серверу данные(строки текста). Сервер возвращает клиенту полученные данные, включив в конец каждого предложения количество символов в нем.

2. Клиент пересылает серверу данные(строки текста). Сервер изменяет порядок следования букв в полученном тексте на обратный и отправляет текст в таком виде клиенту.

3. Клиент пересылает серверу данные(строки текста). Сервер в полученном тексте в конец каждого предложения вставляет свой IP-адрес и номер порта и возвращает в таком виде данные клиенту.

4. Клиент пересылает серверу данные(строки текста). Сервер создает файл с уникальным именем, записывает в него полученные от клиента данные и в качестве результата обработки данных отправляет клиенту имя созданного файла. После получения ответа с сервера клиент распечатывает на экран содержимое указанного сервером файла.

5. Клиент пересылает серверу данные(строку и имя директории). Сервер находит все файлы в заданной директории, содержащие указанную строку и высылает их имена клиенту.

6. Клиент пересылает серверу имя некоторого файла. Сервер находит файл с указанным именем и пересылает его содержимое клиенту, либо сообщает клиенту, что файл с данным именем не найден.

7. Клиент пересылает серверу данные (имя директории). Сервер возвращает список файлов и поддиректорий данной директории(рекурсивно).

Контрольные вопросы

1. Что представляет собой модель клиент-сервер?

2. Приведите общие особенности клиентских программ.

3. Приведите общие особенности серверных программ.

4. Приведите общую схему клиент-серверного взаимодействия.

5. В чем отличие взаимодействия клиента с сервером при использовании различных протоколов транспортного уровня, таких как TCP и UDP? В чем преимущества и недостатки каждого из протоколов?

6. Что такое сокет? Какие виды сокетов вам известны?

7. Опишите основные методы работы с сокетами.

8. Приведите схему взаимодействия клиента с сервером при использовании механизма сокетов.


Лабораторная работа №3

Создание приложения интерактивной переписки.

Цель работы

Изучить основные принципы разработки многопользовательских приложений, построенных на основе технологии клиент-сервер с использованием протокола TCP/IP.

Методические указания

В лабораторной работе №2 было реализовано простейшее взаимодействие, в котором участвовали один клиент и один сервер. В данной лабораторной работе предлагается модифицировать программы таким образом, чтобы сервер мог осуществлять взаимодействие с несколькими клиентами сразу.


Поделиться:



Популярное:

  1. АФГАНСКИЕ БОРЗЫЕ ИЛИ ДОРОГИ, КОТОРЫЕ МЫ ВЫБИРАЕМ
  2. Больным, которые страдают различными формами аллергии, следует максимально избегать контакта с аллергенами для предупреждения развития анафилактического шока
  3. В которой автор начинает расшифровывать слово «интервью», объясняя слова, которые только прикидываются понятными: «общение» и «свобода»
  4. Виды воспитания, которые вы готовы осуществлять на уроках ИЗО?
  5. Вместе с тем, произошедшие незначительные изменения организма при скрещивании дают новые сочетания, которые служат основой формирования новых приспособительных свойств.
  6. Вспомогательное производство - это процессы, которые обеспечивают бесперебойное протекание основных процессов.
  7. Глава: «О добровольных видах уразы, а также о тех видах уразы, которые являются запретными».
  8. Глен Доман предлагает давать энциклопедические знания на карточках, которые мы должны сами изготовить. У многих такая постановка вопроса отбивает желание этим заниматься.
  9. Государственный аппарат это система органов государства, через которые государство осуществляет свою власть.
  10. Давайте сломаем некоторые плохие привычки
  11. Давайте сломаем некоторые плохие привычки
  12. Документопоток – это поток документов, которые циркулируют между пунктами обработки и создания информации и пунктами технической обработки этих документов.


Последнее изменение этой страницы: 2016-05-03; Просмотров: 817; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.023 с.)
Главная | Случайная страница | Обратная связь