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

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 <Ipaddress>");

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-адреса и номера портов, чтобы иметь ясное представление о том, что именно входит в структуры адресов сокетов, которые мы должны заполнить и проверить. Это также упрощает наши объяснения сетевого программирования, снимая необходимость описывать в подробностях еще один набор функций.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

7.4.3. Независимость и организационная структура

Из книги Модель зрелости процессов разработки программного обеспечения автора Паулк Марк

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


Настройка IP-протокола

Из книги Собираем компьютер своими руками автора Ватаманюк Александр Иванович

Настройка IP-протокола Как только вы подсоединяете сетевой кабель и включаете компьютер, Windows Vista обнаруживает сеть и сохраняет информацию о ней. Однако подключение нужно настроить.Откройте Панель управления. Найдите Сеть и Интернет и выберите Просмотр состояния сети и


Платформенная независимость .NET

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

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


Независимость данных и программ

Из книги Основы AS/400 автора Солтис Фрэнк

Независимость данных и программ Использование комбинации физических и логических файлов в AS/400 позволяет достичь независимости программ от используемых ими данных. Отделение описания данных от программ достигается тем, что прикладные программы рассматривают данные в


Независимость Представлений

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Независимость Представлений Общая структура повторно используемого модуля должна позволять модулям-клиентам определять свои действия при отсутствии сведений о реализации модуля. Это требование называется Независимостью Представлений. Предположим, что


Независимость от представления

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

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


6.13 Механизмы протокола IP

Из книги Сетевые средства Linux автора Смит Родерик В.

6.13 Механизмы протокола IP Рассмотрим более детально характеристики протокола IP версии 4, в том числе элементы формата этого протокола — формат заголовка IP и правила управления датаграммой, пересылаемой по сети. Протокол IP версии 6 рассмотрен в главе 22 (IP версии 5 не


9.4 Механизмы протокола UDP

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

9.4 Механизмы протокола UDP Какой механизм необходим для запуска протокола User Datagram Protocol? Прежде всего, UDP должен быть присвоен уникальный идентификатор протокола (17). Это значение будет помещаться в поле протокола IP с названием Protocol во всех исходящих сообщениях UDP. Входящие


11.2 Требования протокола BOOTP

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

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


Выбор протокола

Из книги автора

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


10.1. Работа FTP-протокола

Из книги автора

10.1. Работа FTP-протокола Как мы уже говорили в гл. 6, для использования FTP-протокола требуется две составляющие: клиент и сервер. Для работы с FTP-сервером можно использовать любой Telnet-клиент, и подключившись к 21 порту сервера, вручную передавать команды. Но во времена


10.1.1. Команды FTP-протокола

Из книги автора

10.1.1. Команды FTP-протокола Давайте рассмотрим листинг 10.1. В нем приведен пример, в котором клиентская программа обменивается командами с FTP-сервером. Если в начале строки стоит знак ">", то текст из нее был отправлен серверу, иначе — это ответ FTP-сервера на нашу


Приложение 1 Команды FTP-протокола

Из книги автора

Приложение 1 Команды FTP-протокола Когда вы подключаетесь к FTP-серверу с помощью клиента, работающего из командной строки (например, sftp, рассмотренный в разд. 5.3), то для работы с сервером вам понадобятся следующие команды:? cd путь — изменить текущую директорию на указанную.


24.2. Внеполосные данные протокола TCP

Из книги автора

24.2. Внеполосные данные протокола TCP В протоколе TCP нет настоящих внеполосных данных. Вместо этого в TCP предусмотрен так называемый срочный режим[4] (urgent mode), к рассмотрению которого мы сейчас и приступим. Предположим, процесс записал N байт данных в сокет протокола TCP, и эти