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

UptoLike

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

Когда соединение будет установлено, программа получит приветственное сообщение от сервера.
Telnet — не лучшая программа для работы с FTP-сервером, но с ее помощью можно проследить базовый
алгоритм взаимодействия между клиентом и сервером, схематически представленный в Листинг 1. В
нем клиент подключается к серверу, получает приветственное сообщение и отключается.
Листинг 1. Простейший алгоритм TCP-клиента
/***********************************/
/*** Базовый клиентский алгоритм ***/
/***********************************/
Создание сокета
Определение адреса сервера
Подключение к серверу
Чтение и отображение сообщений
Разрыв соединения.
Описанный алгоритм может показаться чересчур упрощенным. В принципе, так оно и есть. Но
сама процедура подключения к серверу и организации взаимодействия с ним действительно проста. В
следующих разделах рассматривается каждый из указанных выше этапов.
Системный вызов socket()
Функция socket () является универсальным инструментом, с помощью которого организуется ка-
нал связи с другим компьютером и запускается процесс приема/передачи сообщений. Эта функция обра-
зует единый интерфейс между всеми протоколами в Linux/UNIX. Подобно системному вызову ореп(),
создающему дескриптор для доступа к файлам и системным устройствам, функция socket () создает де-
скриптор, позволяющий обращаться к компьютерам
по сети. Посредством параметров функции необхо-
димо указать, к какому уровню стека сетевых протоколов требуется получить доступ. Синтаксис функ-
ции таков:
#include <sys/socket.h>
#include <resolv.h>
int socket(int domain, int type, int protocol);
Значения параметров функции могут быть самыми разными. Полный их список приводится в
приложении А, "Информационные таблицы". Основные параметры перечислены в табл.. 1.1
Таблица 1 Избранные параметры функции socket ()
Параметр Значение Описание
domain PF_INET Протоколы семейства IPv4; стек TCP/IP
PF_LOCAL Локальные именованные каналы в стиле BSD; используется утилитой
журнальной регистрации, а также при организации очередей принте-
ра
PF_IPX Протоколы Novell
PF_INET6 Протоколы семейства IPv6; стек TCP/IP
type SOCK_STREAM Протокол последовательной передачи данных (в виде байтового по-
тока) с подтверждением доставки (TCP)
SOCK_RDM Протокол пакетной передачи данных с подтверждением доставки
(еще не реализован в большинстве операционных систем)
SOCK_DGRAM Протокол пакетной
передачи данных без подтверждения доставки
(UDP - User Datagram Protocol)
SOCK_RAW Протокол пакетной передачи низкоуровневых данных без подтвер-
ждения доставки
protocol Представляет собой 32-разрядное целое число с сетевым порядком
следования байтов. В большинстве типов соединений допускается
единственное значение данного параметра: 0 (нуль), а в соединениях
типа
SOCK RAW параметр должен принимать значения от 0 до 255.
В примерах, приведенных в данной книге, будут использоваться такие параметры: do-
main=PF_INET, type=SOCK_STREAM, protocol=0.
Префиксы PF_ и AF_
В рассматриваемых примерах обозначения доменов в функции socket() даются с префиксом PF_ (proto-
col family— семейство протоколов). Многие программисты некорректно пользуются константами с
префиксом
AF_ (address family—семейство адресов). В настоящее время эти семейства констант взаи-
мозаменяемы, но подобная ситуация может измениться в будущем.
Вызов протокола TCP выглядит следующим образом:
       Когда соединение будет установлено, программа получит приветственное сообщение от сервера.
Telnet — не лучшая программа для работы с FTP-сервером, но с ее помощью можно проследить базовый
алгоритм взаимодействия между клиентом и сервером, схематически представленный в Листинг 1. В
нем клиент подключается к серверу, получает приветственное сообщение и отключается.
Листинг 1. Простейший алгоритм TCP-клиента
/***********************************/
/*** Базовый клиентский алгоритм ***/
/***********************************/
Создание сокета
Определение адреса сервера
Подключение к серверу
Чтение и отображение сообщений
Разрыв соединения.

      Описанный алгоритм может показаться чересчур упрощенным. В принципе, так оно и есть. Но
сама процедура подключения к серверу и организации взаимодействия с ним действительно проста. В
следующих разделах рассматривается каждый из указанных выше этапов.

       Системный вызов socket()
      Функция socket () является универсальным инструментом, с помощью которого организуется ка-
нал связи с другим компьютером и запускается процесс приема/передачи сообщений. Эта функция обра-
зует единый интерфейс между всеми протоколами в Linux/UNIX. Подобно системному вызову ореп(),
создающему дескриптор для доступа к файлам и системным устройствам, функция socket () создает де-
скриптор, позволяющий обращаться к компьютерам по сети. Посредством параметров функции необхо-
димо указать, к какому уровню стека сетевых протоколов требуется получить доступ. Синтаксис функ-
ции таков:
#include 
#include 
int socket(int domain, int type, int protocol);


     Значения параметров функции могут быть самыми разными. Полный их список приводится в
приложении А, "Информационные таблицы". Основные параметры перечислены в табл.. 1.1
Таблица 1 Избранные параметры функции socket ()
  Параметр        Значение                                   Описание
domain        PF_INET           Протоколы семейства IPv4; стек TCP/IP
              PF_LOCAL          Локальные именованные каналы в стиле BSD; используется утилитой
                                журнальной регистрации, а также при организации очередей принте-
                                ра
              PF_IPX            Протоколы Novell
              PF_INET6          Протоколы семейства IPv6; стек TCP/IP
type          SOCK_STREAM       Протокол последовательной передачи данных (в виде байтового по-
                                тока) с подтверждением доставки (TCP)
              SOCK_RDM          Протокол пакетной передачи данных с подтверждением доставки
                                (еще не реализован в большинстве операционных систем)
              SOCK_DGRAM        Протокол пакетной передачи данных без подтверждения доставки
                                (UDP - User Datagram Protocol)
              SOCK_RAW          Протокол пакетной передачи низкоуровневых данных без подтвер-
                                ждения доставки
protocol                        Представляет собой 32-разрядное целое число с сетевым порядком
                                следования байтов. В большинстве типов соединений допускается
                                единственное значение данного параметра: 0 (нуль), а в соединениях
                                типа SOCK RAW параметр должен принимать значения от 0 до 255.
     В примерах, приведенных в данной книге, будут использоваться такие параметры: do-
main=PF_INET, type=SOCK_STREAM, protocol=0.
Префиксы PF_ и AF_
В рассматриваемых примерах обозначения доменов в функции socket() даются с префиксом PF_ (proto-
col family— семейство протоколов). Многие программисты некорректно пользуются константами с
префиксом AF_ (address family—семейство адресов). В настоящее время эти семейства констант взаи-
мозаменяемы, но подобная ситуация может измениться в будущем.
       Вызов протокола TCP выглядит следующим образом: