UNIX: разработка сетевых приложений - [4]

Шрифт
Интервал

Чтобы упростить написанный нами код, мы определяем наши собственные функции-обертки (wrapper functions) для большинства вызываемых системных функций. Функции-обертки в большинстве случаев служат для проверки кода возврата. В случае ошибки функция-обертка печатает соответствующее сообщение и завершает работу программы.

В этой же главе мы подробно расскажем о сети, в которой тестировались все примеры этой книги, приведем имена узлов, их IP-адреса и названия операционных систем, под управлением которых они работают.

В разговорах о Unix широко используется термин «X», обозначающий стандарт, принятый большинством производителей. Мы опишем историю стандарта POSIX и то, каким образом он определяет интерфейсы программирования приложений (Application Programming Interfaces, API), рассматриваемые в этой книге, наряду с другими конкурирующими стандартами.

1.2. Простой клиент времени и даты

Рассмотрим конкретный пример, на котором мы введем многие понятия и термины, используемые в этой книге. В листинге 1.1[1] представлена реализация TCP-клиента времени и даты. Этот клиент устанавливает TCP-соединение с сервером, а сервер просто посылает клиенту время и дату в текстовом формате.

Листинг 1.1. Клиент TCP для определения времени и даты

>//intro/daytimetcpcli.с

> 1 #include "unp.h"


> 2 int

> 3 main(int argc, char **argv)

> 4 {

> 5  int sockfd, n;

> 6  char recvline[MAXLINE + 1];

> 7  struct sockaddr_in servaddr;


> 8  if (argc != 2)

> 9   err_quit("usage: a.out ");


>10  if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)

>11   err_sys("socket error");


>12  bzero(&servaddr, sizeof(servaddr));

>13  servaddr.sin_family = AF_INET;

>14  servaddr.sin_port = htons(13); /* сервер времени и даты */

>15  if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)

>16   err_quit("inet_pton error for %s", argv[1]);


>17  if (connect(sockfd, (SA*)&servaddr, sizeof(servaddr)) < 0)

>18   err_sys("connect error");


>19  while ((n = read(sockfd, recvline, MAXLINE)) > 0) {

>20   recvline[n] = 0; /* завершающий нуль */

>21   if (fputs(recvline, stdout) == EOF)

>22    err_sys("fputs error");

>23  }

>24  if (n < 0)

>25  err_sys("read error");


>26  exit(0);

>27 }

ПРИМЕЧАНИЕ

Это формат, который мы используем для всего исходного кода в тексте. Каждая непустая строка пронумерована. Абзац, описывающий некоторую часть кода, начинается с двух номеров — начального и конечного номеров тех строк, о которых идет речь в данном абзаце. Как правило, абзацу предшествует короткий заголовок, в котором кратко резюмируется содержание описываемого кода.

В начале фрагмента кода указано имя файла исходного кода: в данном примере это файл daytimetcpcli.c в каталоге intro. Поскольку исходный код всех примеров этой книги можно свободно скачать из Сети (см. предисловие), вы можете найти соответствующие исходные файлы по их названиям. Наилучший способ изучить концепции сетевого программирования — компилировать, запускать и особенно модифицировать эти программы в ходе изучения книги.

ПРИМЕЧАНИЕ

Мы будем использовать примечания наподобие этого для описания особенностей реализации и исторических справок.

Если мы откомпилируем эту программу в определенный по умолчанию файл >a.out и выполним ее, на выходе мы получим следующее:

>solaris % a.out 206.168.112.96 наш ввод

>Mon May 26 20:58:40 2003 вывод программы

ПРИМЕЧАНИЕ

Отображая интерактивный ввод и вывод, мы показываем то, что мы вводим, полужирным шрифтом; вывод же компьютера показываем моноширинным шрифтом. Мы всегда указываем название системы как часть приглашения интерпретатора (в данном примере solaris), чтобы показать, на каком узле выполняется команда. Системы, используемые для выполнения большинства примеров этой книги, показаны на рис. 1.7. Имена узлов обычно соответствуют операционным системам.

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

Подключение собственного заголовочного файла

>1 Мы подключаем наш собственный заголовочный файл, >unp.h, текст которого приведен в разделе Г.1. Этот заголовочный файл, в свою очередь, подключает различные системные заголовочные файлы, которые необходимы большинству сетевых программ, и определяет используемые нами константы (например, >MAXLINE).

Аргументы командной строки

>2-3 Определение функции >main вместе с аргументами командной строки. Везде в данной книге при написании кода подразумевалось, что для его компиляции должен использоваться компилятор ANSI С (American National Standards Institute — Национальный институт стандартизации США), который также называют ISO С.

Создание сокета TCP

>10-11 Функция >socket создает потоковый сокет (>SOCK_STREAM) Интернета (AF_INET) — это красивое название для обычного TCP-сокета). Функция возвращает дескриптор (небольшое целое число), который мы используем для идентификации сокета во всех последующих вызовах (например, >connect и >read).

ПРИМЕЧАНИЕ

Оператор if содержит вызов функции socket, присваивание возвращаемого значения переменной sockfd и последующую проверку, является ли это присвоенное значение меньшим нуля. Мы могли разбить этот оператор на два оператора С следующим образом:


Еще от автора Уильям Ричард Стивенс
UNIX: взаимодействие процессов

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


Рекомендуем почитать
Это ваше Fido

Одно из немногих изданий на русском языке, которое посвящено старейшей глобальной компьютерной сети "Fidonet". Сатирический справочник о жизни и смерти самого древнего сетевого сообщества, которое до сих пор существует среди нас.


Безопасность информационных систем

В пособии излагаются основные тенденции развития организационного обеспечения безопасности информационных систем, а также подходы к анализу информационной инфраструктуры организационных систем и решению задач обеспечения безопасности компьютерных систем.Для студентов по направлению подготовки 230400 – Информационные системы и технологии (квалификация «бакалавр»).


UNIX — универсальная среда программирования

В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями shell.Для программистов-пользователей операционной системы UNIX.


QNX/UNIX: Анатомия параллелизма

Книга адресована программистам, работающим в самых разнообразных ОС UNIX. Авторы предлагают шире взглянуть на возможности параллельной организации вычислительного процесса в традиционном программировании. Особый акцент делается на потоках (threads), а именно на тех возможностях и сложностях, которые были привнесены в технику параллельных вычислений этой относительно новой парадигмой программирования. На примерах реальных кодов показываются приемы и преимущества параллельной организации вычислительного процесса.


Виртуальные  машины: несколько компьютеров в  одном

Применение виртуальных машин дает различным категориям пользователей — от начинающих до IT-специалистов — множество преимуществ. Это и повышенная безопасность работы, и простота развертывания новых платформ, и снижение стоимости владения. И потому не случайно сегодня виртуальные машины переживают второе рождение.В книге рассмотрены три наиболее популярных на сегодняшний день инструмента, предназначенных для создания виртуальных машин и управления ими: Virtual PC 2004 компании Microsoft, VMware Workstation от компании VMware и относительно «свежий» продукт — Parallels Workstation, созданный в компании Parallels.


Недокументированные и малоизвестные возможности Windows XP

Книга содержит подробные сведения о таких недокументированных или малоизвестных возможностях Windows XP, как принципы работы с программами rundll32.exe и regsvr32.exe, написание скриптов сервера сценариев Windows и создание INF-файлов. В ней приведено описание оснасток, изложены принципы работы с консолью управления mmc.exe и параметрами реестра, которые изменяются с ее помощью. Кроме того, рассмотрено большое количество средств, позволяющих выполнить тонкую настройку Windows XP.Эта книга предназначена для опытных пользователей и администраторов, которым интересно узнать о нестандартных возможностях Windows.


Осени не будет никогда

Новое произведение известного писателя Дмитрия Липскерова убеждает — перед нами особая форма русского романа. Писатель смело экспериментирует с жанрами, сочетая латиноамериканский сюжет с русским фольклором. Гротеск и фантасмагория размывают границы обыденной жизни, и главные герои — московские менты, красавица-психиатр, фээсбешный полковник и художник с мировым именем — оказываются вовлечены в водоворот невероятных событий. Трагикомизм, гротеск, оригинальность и жизненность каждого действующего лица сближают творчество Д.Липскерова с такими литературными именами, как Г.Г.Маркес, М.Павич.


Секреты кроя и шитья без примерок и подгонок

На страницах этой книги вы найдете подробные описания и пояснения к разбору моделей и основным законам конструирования и моделирования, начиная со снятия мерок и кончая созданием завершенного варианта чертежа выкройки. Автор виртуозно привязывает каждое изделие к индивидуальной фигуре с ее неповторимым рельефом. Благодаря советам Галии Злачевской вы сможете понять и повторить ее действия и в итоге комфортно и красиво одеть любую фигуру. Цель работы автора – практическое воплощение предлагаемой идеи в одежду на конкретного человека.


Первичная консультация. Установление контакта и завоевание доверия

В руководстве, написанном известными специалистами, психологом Сарой Файн и социальным работником Полом Глассером, рассматриваются закономерности и особенности начального этапа взаимодействия консультанта и клиента. Детально описаны динамика психотерапевтического процесса и приемы установления контакта и завоевания доверия во время первичной консультации различных групп клиентов, как добровольных, так и недобровольных.Книга предназначена как для начинающих, так и для опытных специалистов, в задачи которых входит оказание помощи другим людям: психологам, социальным работникам, юристам, педагогам и т. д.


Лучшие модели на любую фигуру без примерок и подгонок

Книга представляет собой сборник, который содержит схемы построения чертежей из двух предыдущих бестселлеров автора, а также предлагает ряд новых моделей. Галия Злачевская – автор эксклюзивной методики конструирования швейных изделий. Особенность ее метода в том, что вариант построения модели подбирается с учетом особенностей силуэта фигуры, поэтому крой сразу получается точным. И главное – больше никаких примерок и подгонок! Следуя простым рекомендациям автора, вы легко сможете «шаг за шагом» освоить эту методику и в итоге – получите идеально сидящую вещь.Вы научитесь создавать современные, неповторимые и оригинальные модели для мужчин, женщин, детей и даже малышей до 3 лет с минимальными затратами времени и сил.