Составители:
Рубрика:
Когда соединение будет установлено, программа получит приветственное сообщение от сервера.
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 выглядит следующим образом:
Страницы
- « первая
- ‹ предыдущая
- …
- 3
- 4
- 5
- 6
- 7
- …
- следующая ›
- последняя »