Программирование POSIX сокет. Сукиязов С.А. - 3 стр.

UptoLike

Составители: 

Êëèåí ò
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, "Создание сер-
верных приложений".