Составители:
Рубрика:
Êëèåí ò
socket()
bind()
connect()
close()
read() write()
Рисунок 1. Каждый клиент взаимодействует с операционной системой, вызывая определен-
ные функции в заданном порядке
Опишем каждый из этапов:
1.Создание сокета. Выбор сетевого домена и типа сокета.
2.Задание параметров сокета (необязательно). Поведение сокета регулируется множеством параметров.
Пока сокет открыт, программа может менять любой из них.
3.Привязка к определенному адресу/порту
(необязательно). Задание конкретного IP-адреса, а также вы-
бор порта. Если пропустить этот этап, операционная система разрешит связь с любым IP-адресом и
назначит произвольный номер порта.
4.Подключение к одноранговому компьютеру/серверу (необязательно). Организация двунаправленного
канала связи между клиентской и другой сетевой программой. Если пропустить этот этап, будет
создан канал адресной передачи
сообщений без установления соединения.
5.Частичный разрыв соединения (необязательно). Выбор одного из двух режимов работы: прием или
передача. Этот этап можно выполнить, если создан запасной канал связи.
6.Прием/передача сообщений (необязательно). Этот этап можно пропустить, если требуется всего лишь
проверить, доступен ли сервер.
7.Разрыв соединения. Естественно, этот этап важен: долго
выполняющиеся программы могут со време-
нем исчерпать лимит дескрипторов файлов, если не закрывать неиспользуемые сеансы.
Ниже некоторые из этапов описываются подробнее: приводятся примеры и рассматриваются соот-
ветствующие системные вызовы.
Связь с окружающим миром посредством сокетов
Несколько лет назад под сетью подразумевался последовательный канал связи между двумя ком-
пьютерами. Все компьютеры общались между собой по разным каналам, а для передачи файлов в UNIX
применялась система UUCP (UNIX-to-UNIX Copy). С усовершенствованием технологии кабельной пе-
редачи данных концепция разделения канала связи стала реальной. Она означала, что каждый компью-
тер должен был идентифицировать себя
уникальным образом и ждать своей очереди для передачи дан-
ных. Существуют различные способы совместного использования каналов связи, и многие из них обес-
печивают достаточно хорошую производительность. Иногда компьютеры пытаются передавать данные
одновременно, в результате чего возникают конфликты пакетов.
За решение подобных проблем и организацию повторной передачи данных отвечают аппаратные
и
другие низкоуровневые драйверы. Это позволяет программисту сконцентрироваться на решении во-
просов приема и передачи сообщений. Библиотека функций работы с сокетами — Socket API (Applica-
tion Programming Interface) — является основным инструментом программиста.
Программирование сокетов отличается от прикладного и инструментального программирования,
поскольку приходится иметь дело с одновременно выполняющимися программами. Это означает, что
требуется дополнительно решать вопросы синхронизации и управления
ресурсами.
Сокеты позволяют асинхронно передавать данные через двунаправленный канал. При этом могут
возникать различного рода проблемы, например взаимоблокировки процессов и зависания программ.
При тщательном проектировании приложений большинство таких проблем вполне можно избежать.
Обычно перегруженный сервер замедляет работу в сети. Правильная синхронизация процессов и
рациональное распределение ресурсов позволяют снизить нагрузку на сервер
, повысив пропускную
способность сети. Методы повышения производительности рассматриваются в части II, "Создание сер-
верных приложений".
Ê ë è åí ò socket() bind() connect() read() write() close() Рисунок 1. Каждый клиент взаимодействует с операционной системой, вызывая определен- ные функции в заданном порядке Опишем каждый из этапов: 1.Создание сокета. Выбор сетевого домена и типа сокета. 2.Задание параметров сокета (необязательно). Поведение сокета регулируется множеством параметров. Пока сокет открыт, программа может менять любой из них. 3.Привязка к определенному адресу/порту (необязательно). Задание конкретного IP-адреса, а также вы- бор порта. Если пропустить этот этап, операционная система разрешит связь с любым IP-адресом и назначит произвольный номер порта. 4.Подключение к одноранговому компьютеру/серверу (необязательно). Организация двунаправленного канала связи между клиентской и другой сетевой программой. Если пропустить этот этап, будет создан канал адресной передачи сообщений без установления соединения. 5.Частичный разрыв соединения (необязательно). Выбор одного из двух режимов работы: прием или передача. Этот этап можно выполнить, если создан запасной канал связи. 6.Прием/передача сообщений (необязательно). Этот этап можно пропустить, если требуется всего лишь проверить, доступен ли сервер. 7.Разрыв соединения. Естественно, этот этап важен: долго выполняющиеся программы могут со време- нем исчерпать лимит дескрипторов файлов, если не закрывать неиспользуемые сеансы. Ниже некоторые из этапов описываются подробнее: приводятся примеры и рассматриваются соот- ветствующие системные вызовы. Связь с окружающим миром посредством сокетов Несколько лет назад под сетью подразумевался последовательный канал связи между двумя ком- пьютерами. Все компьютеры общались между собой по разным каналам, а для передачи файлов в UNIX применялась система UUCP (UNIX-to-UNIX Copy). С усовершенствованием технологии кабельной пе- редачи данных концепция разделения канала связи стала реальной. Она означала, что каждый компью- тер должен был идентифицировать себя уникальным образом и ждать своей очереди для передачи дан- ных. Существуют различные способы совместного использования каналов связи, и многие из них обес- печивают достаточно хорошую производительность. Иногда компьютеры пытаются передавать данные одновременно, в результате чего возникают конфликты пакетов. За решение подобных проблем и организацию повторной передачи данных отвечают аппаратные и другие низкоуровневые драйверы. Это позволяет программисту сконцентрироваться на решении во- просов приема и передачи сообщений. Библиотека функций работы с сокетами — Socket API (Applica- tion Programming Interface) — является основным инструментом программиста. Программирование сокетов отличается от прикладного и инструментального программирования, поскольку приходится иметь дело с одновременно выполняющимися программами. Это означает, что требуется дополнительно решать вопросы синхронизации и управления ресурсами. Сокеты позволяют асинхронно передавать данные через двунаправленный канал. При этом могут возникать различного рода проблемы, например взаимоблокировки процессов и зависания программ. При тщательном проектировании приложений большинство таких проблем вполне можно избежать. Обычно перегруженный сервер замедляет работу в сети. Правильная синхронизация процессов и рациональное распределение ресурсов позволяют снизить нагрузку на сервер, повысив пропускную способность сети. Методы повышения производительности рассматриваются в части II, "Создание сер- верных приложений".