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

UptoLike

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

текущее время)
8. Начало передачи данных
Этого достаточно для простого вызова функции connect (). Описанный процесс может быть гораз-
до более сложным, если между клиентом и сервером находятся компьютеры, выполняющие маршрути-
зацию (коммутацию и верификацию пакетов, фрагментацию и дефрагментацию, трансляцию протоко-
лов, туннелирование и т.д.). Библиотека Socket API значительно упрощает сетевое взаимодействие.
Для организации
соединения требуется знать язык и правила сетевого общения. Все начинается с
функции socket(), которая создает аналог телефонной трубки. Через эту "трубку" программа посылает и
принимает сообщения. Чтение и запись данных осуществляются с помощью тех же самых функций
read() и write () которые применяются при работе с файлами. Более сложные системы строятся вокруг
функции recv().
Пример использования библиотеки Socket API
В сетевом соединении всегда есть отправитель и получатель. В общем случае отправителем явля-
ется клиент, который запрашивает сервис, предоставляемый сетевым компьютером. В части I, "Созда-
ние сетевых клиентских приложений", рассматривались основы клиентского программирования: как
подключить клиента к серверу, как организовать прямую доставку сообщений без установления соеди-
нения и как работать с протоколами
стека TCP/IP. С этой главы начинается знакомство с другой сторо-
ной соединенияприемником, или сервером.
Чтобы понять схему взаимодействия клиента и сервера, представьте, что сетьэто телефонная
система большой компании, в которой сервер является центральным телефонным номером, направляю-
щим звонки конкретным служащим. Клиент связывается с требуемым служащим, набирая центральный
и дополнительный
номера. Теперь ситуация проясняется. Центральный номер является адресом сетевого
узла, а дополнительный номерэто порт конкретного сервиса.
Клиент должен знать номер порта, по которому обращается. Это похоже на телефонный номер,
который должен быть где-то опубликован: если клиент не знает номер, он не сможет по нему позвонить.
Ниже мы остановимся на
том, как предоставлять сервисы и шаг за шагом рассматрим процесс
создания сервера.
Схема работы сокета: общий алгоритм сервера
Процесс построения сервера всегда начинается с создания сокета. Подобно тому как в клиентской про-
грамме требуется определенная последовательность системных вызовов, аналогичная последователь-
ность необходима и на сервере, только здесь она длиннее. Если некоторые функции клиенту вызывать
не обязательно, то для серверного приложения все они нужны (Рисунок 2).
Клиентская программа, которую мы писали
в первых главах, вызывала функции в такой последо-
вательности: socket (), connect (), read(), write () и close (). Системный вызов bind() был необязательным,
так как эту функцию вызывала операционная система. Номер порта не требовался, поскольку программа
обращалась напрямую к серверу. Клиент всегда создает активное соединение, потому что он постоянно
его занимает.
С другой стороны, серверные программы должны предоставлять своим
клиентам неизменные,
четко заданные номера портов. Базовая последовательность вызовов здесь будет такой: socket(), bind(),
listen(), accept() и close(). В то время как клиент создает активное соединение, серверное соединение пас-
сивно. Функции listen () и accept () устанавливают соединение только тогда, когда приходит запрос от
клиента.
Знакомство с функцией bind() состоялось выше, сейчас она будет описана более формально. Кро-
ме того
, будут представлены две новые функции: listen () и accept().
                                 текущее время)
                                 8. Начало передачи данных


       Этого достаточно для простого вызова функции connect (). Описанный процесс может быть гораз-
до более сложным, если между клиентом и сервером находятся компьютеры, выполняющие маршрути-
зацию (коммутацию и верификацию пакетов, фрагментацию и дефрагментацию, трансляцию протоко-
лов, туннелирование и т.д.). Библиотека Socket API значительно упрощает сетевое взаимодействие.
       Для организации соединения требуется знать язык и правила сетевого общения. Все начинается с
функции socket(), которая создает аналог телефонной трубки. Через эту "трубку" программа посылает и
принимает сообщения. Чтение и запись данных осуществляются с помощью тех же самых функций
read() и write () которые применяются при работе с файлами. Более сложные системы строятся вокруг
функции recv().

      Пример использования библиотеки Socket API
      В сетевом соединении всегда есть отправитель и получатель. В общем случае отправителем явля-
ется клиент, который запрашивает сервис, предоставляемый сетевым компьютером. В части I, "Созда-
ние сетевых клиентских приложений", рассматривались основы клиентского программирования: как
подключить клиента к серверу, как организовать прямую доставку сообщений без установления соеди-
нения и как работать с протоколами стека TCP/IP. С этой главы начинается знакомство с другой сторо-
ной соединения — приемником, или сервером.
       Чтобы понять схему взаимодействия клиента и сервера, представьте, что сеть — это телефонная
система большой компании, в которой сервер является центральным телефонным номером, направляю-
щим звонки конкретным служащим. Клиент связывается с требуемым служащим, набирая центральный
и дополнительный номера. Теперь ситуация проясняется. Центральный номер является адресом сетевого
узла, а дополнительный номер — это порт конкретного сервиса.
      Клиент должен знать номер порта, по которому обращается. Это похоже на телефонный номер,
который должен быть где-то опубликован: если клиент не знает номер, он не сможет по нему позвонить.
      Ниже мы остановимся на том, как предоставлять сервисы и шаг за шагом рассматрим процесс
создания сервера.

      Схема работы сокета: общий алгоритм сервера
Процесс построения сервера всегда начинается с создания сокета. Подобно тому как в клиентской про-
грамме требуется определенная последовательность системных вызовов, аналогичная последователь-
ность необходима и на сервере, только здесь она длиннее. Если некоторые функции клиенту вызывать
не обязательно, то для серверного приложения все они нужны (Рисунок 2).
       Клиентская программа, которую мы писали в первых главах, вызывала функции в такой последо-
вательности: socket (), connect (), read(), write () и close (). Системный вызов bind() был необязательным,
так как эту функцию вызывала операционная система. Номер порта не требовался, поскольку программа
обращалась напрямую к серверу. Клиент всегда создает активное соединение, потому что он постоянно
его занимает.
        С другой стороны, серверные программы должны предоставлять своим клиентам неизменные,
четко заданные номера портов. Базовая последовательность вызовов здесь будет такой: socket(), bind(),
listen(), accept() и close(). В то время как клиент создает активное соединение, серверное соединение пас-
сивно. Функции listen () и accept () устанавливают соединение только тогда, когда приходит запрос от
клиента.
      Знакомство с функцией bind() состоялось выше, сейчас она будет описана более формально. Кро-
ме того, будут представлены две новые функции: listen () и accept().