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

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

Чтение и отображение ответа сервера

>19-25 Мы читаем ответ сервера и отображаем результат, используя стандартную функцию ввода-вывода >fputs. Нужно быть внимательным при использовании TCP, поскольку это потоковый (byte-stream) протокол без границ записей. Обычно ответом сервера является 26-байтовая строка следующей формы:

>Fri Jan 12 14:27:52 1996\r\n

где >\r — это возврат каретки, а >\n — перевод строки (в символах ASCII). В случае потокового протокола эти 26 байт можно получить в нескольких вариантах: в виде отдельного сегмента TCP, содержащего все 26 байт данных, либо в виде 26 сегментов, каждый из которых содержит по одному байту данных, или в виде любой другой комбинации, в сумме дающей 26 байт. Обычно возвращается один сегмент, содержащий все 26 байт, но при больших объемах данных нельзя рассчитывать, что ответ сервера будет получен с помощью одного вызова >read. Следовательно, при чтении из сокета TCP нужно всегда вызывать функцию >read циклически и прерывать цикл либо когда функция возвращает 0 (например, соединение было разорвано другой стороной), либо когда возвращенное значение оказывается меньше нуля (ошибка).

В приведенном примере конец записи обозначается сервером, закрывающим соединение. Эта технология используется также версией 1.0 протокола передачи гипертекста (Hypertext Transfer Protocol, HTTP). Существуют и другие способы обозначения конца записи. Например, протокол передачи файлов (File Transfer Protocol, FTP) и простой протокол передачи почты (Simple Mail Transfer Protocol, SMTP) обозначают конец записи 2-байтовой последовательностью, состоящей из символов ASCII возврата каретки и перевода строки. Служба вызова удаленных процедур (Remote Procedure Call, RPC) и система именования доменов (Domain Name System, DNS) помещают перед каждой записью, отсылаемой по протоколу TCP, двоичное число, соответствующее длине этой записи. Здесь важно осознать, что протокол TCP сам по себе не предоставляет никаких меток записей: если приложение хочет отделять записи одну от другой, оно должно делать это самостоятельно, и для этого имеются стандартные методы.

Завершение программы

>26 Функция >exit завершает программу. Unix всегда закрывает все открытые дескрипторы при завершении процесса, поэтому теперь наш сокет TCP закрыт.

Как уже говорилось, пока мы лишь выделили наиболее важные моменты, детальным исследованием которых займемся в дальнейшем.

1.3. Независимость от протокола

Наша программа, представленная в листинге 1.1, является зависимой от протокола (protocol dependent) IPv4. Мы выделяем и инициализируем структуру >sockaddr_in, определяем адрес как относящийся к семейству AF_INET и устанавливаем первый аргумент функции >socket равным >AF_INET.

Если мы хотим изменить программу так, чтобы она работала по протоколу IPv6, мы должны изменить код. В листинге 1.2 показана новая версия программы с соответствующими изменениями, отмеченными полужирным шрифтом.

Листинг 1.2. Версия листинга 1.1 для IPv6

>//intro/daytimetcpcliv6.с

> 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_in6 servaddr;


> 8  if (argc != 2)

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


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

>11   err_sys("socket error");


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

>13  servaddr.sin6_family = AF_INET6;

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

>15  if (inet_pton(AF_INET6, argv[1], &servaddr.sin6_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 }

Изменились только пять строк, но в результате мы все равно получили программу, зависимую от протокола, в данном случае — от протокола IPv6. Лучше сделать программу независимой от протокола (protocol independent). В листинге 11.3 представлена независимая от протокола версия этого клиента, основанная на вызове >getaddrinfo из >tcp_connect.

Другим недостатком наших программ является то, что пользователь должен вводить IP-адрес сервера в точечно-десятичной записи (например, 206.168.112.219 для версии IPv4). Людям проще работать с именами, чем с числами (например, >www.unpbook.com). В главе 11 мы обсудим функции, обеспечивающие преобразование имен узлов в IP-адреса и имен служб в порты. Мы специально откладываем описание этих функций, продолжая использовать IP-адреса и номера портов, чтобы иметь ясное представление о том, что именно входит в структуры адресов сокетов, которые мы должны заполнить и проверить. Это также упрощает наши объяснения сетевого программирования, снимая необходимость описывать в подробностях еще один набор функций.

1.4. Обработка ошибок: функции-обертки

В любой реальной программе существенным моментом является проверка каждого вызова функции на предмет возвращаемой ошибки. В листинге 1.1 мы проводим поиск ошибок в вызовах функций


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

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


Рекомендуем почитать
Яйцо кукушки или Преследуя шпиона в компьютерном лабиринте

В отличие от плохого танцора, хорошему сисадмину мешают только кукушкины яйца. Их откладывают в его компьютер злобные хакеры, чтобы из них вылупились программы, делающие своего папу-кукушку суперпользователем. Но сколько кабелю не виться — а кончику быть: бравый сисадмин не дремлет и за годик-другой выводит злоумышленников на чистую воду: на этот раз хакерская тусовка круто пролетела. Такого предельно краткое содержание классической книги эксперта по компьютерной безопасности Клиффа Столла «Яйцо кукушки».


Разработка приложений в среде Linux

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



Серверные технологии хранения данных в среде Windows® 2000 Windows® Server 2003

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


Перспективы свободного программного обеспечения в сфере государственного управления и бюджетном секторе

n1`Глава 2 из отчета Фонда Новая экономика Министерству экономического развития и торговли по теме «Анализ результатов и разработка предложений по созданию механизмов поддержки (в том числе за счет средств федерального бюджета) проектов по использованию ИКТ в экономике, социальной сфере, государственном управлении на региональном и муниципальном уровнях власти». Работа выполнена в рамках ФЦП «Электронная Россия». Дается очерк перспектив модели коммерческого программного обеспечения, известной как свободное программное обеспечение (СПО), в части удовлетворения потребности государственных органов и организаций в компьютерных программах, в сравнении с альтернативной (несвободной) моделью.


64 килобайта о Фидо

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


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

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


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

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


Оригами

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


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

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