Данная книга в основном посвящена программированию сокетов на языке C в среде Linux. В ней шаг за шагом рассказывается о том, как писать профессиональные сетевые клиентские, серверные и одноранговые приложения. Читатель узнает, как работать с существующими клиент-серверными протоколами (в частности, HTTP), взаимодействовать с другими компьютерами по протоколу UDP и создавать свои собственные протоколы. В книге описываются все типы пакетов, поддерживаемых в семействе протоколов TCP/IP, их достоинства и недостатки.Помимо базового материала представлены сведения о различных методиках многозадачности, рассказывается о средствах управления вводом-выводом и обеспечения безопасности сетевых приложений. В книге также описываются объектно-ориентированные подходы к сетевому программированию на языках Java и C++. Отдельные главы посвящены технологии RPC, протоколу SSL, работе в групповом и широковещательном режимах и стандарту IPv6.Книга предназначена профессиональным программист
Об авторе
Шон Уолтон получил степень магистра компьютерных наук в 1990 г. в университете Бригема Янга, штат Юта, специализируясь в области теории языков программирования и многозадачности. В 1988 г. он начал работать на факультете вычислительной техники этого же университета в качестве консультанта по разработке теории и методов управления транспьютерами. Перейдя на должность системного администратора факультета, он впервые столкнулся с программированием BSD-сокетов. Впоследствии, будучи сотрудником компании Hewlett-Packard, он разработал средство автоматического распознавания языка (PostScript и PCL), применяемое в принтерах LaserJet 4 и более поздних моделей. Шон также создал микрооперационную систему реального времени для микроконтроллера 8052, которая эмулировала процессоры принтеров.
Шон много лет профессионально занимался программированием и администрированием UNIX, включая операционные системы Linux, HP-UX, Ultrix, SunOS и System V. Работая со столь разнообразными системами, он сосредоточивал свои усилия на с>
Transfer interrupted!
программирования, позволявших писать приложения, без труда переносимые в любую из систем.
В последние несколько лет Шон вел курсы и читал лекции по основам вычислительной техники, управлению проектами, объектно-ориентированному проектированию, языкам Java и C++. В начале 1998 г. он начал заниматься программированием сокетов в Java и позднее включил этот предмет в свой курс лекций по Java. В настоящее время он сотрудничает с компанией Nationwide Enterprise и параллельно занимается преподавательской деятельностью.
Введение
Расширение опыта программирования
Большинство задач, которые приходится решать программисту в повседневной жизни, связано с выполнением локальных действий в системе. Обычно они не выходят за рамки управления мышью, клавиатурой, экраном и файловой системой. Гораздо труднее заставить взаимодействовать несколько программ, которые работают на разных компьютерах, подключенных к сети. Сетевое программирование, несомненно, обогатит ваш опыт, так как вам придется координировать работу множества компонентов приложения и тщательно распределять обязанности между ними.
Фундаментальной единицей всего сетевого программирования в Linux (и большинстве других операционных систем) является сокет. Так же, как функции файлового ввода-вывода определяют интерфейс взаимодействия с файловой системой, сокет соединяет программу с сетью. С его помощью она посылает и принимает сообщения.
Создавать сетевые приложения труднее, чем даже заниматься многозадачным программированием, так как круг возникающих проблем здесь гораздо шире. Необходимо обеспечивать максимальную производительность, координировать обмен данными и управлять вводом-выводом.
В книге рассматривается множество методик и способов решения этих проблем. Она содержит как ответы на конкретные вопросы, так и описание общих стратегий построения профессиональных сетевых программ.
Структура книги
Книга состоит из пяти частей, каждая из которых связана с предыдущим материалом.
Часть I, "Создание сетевых клиентских приложений"
Представлены вводные сведения о сокетах, определены основные термины, описаны различные типы сокетов и принципы адресации, изложена базовая теория сетей.
Часть II, "Создание серверных приложений"
Рассматриваются серверные технологии, алгоритмы многозадачности, механизмы ввода-вывода и параметры сокетов.
Часть III, "Объектно-ориентированные сокеты"
Язык C - это не единственный язык программирования сокетов. В этой части рассматриваются объектно-ориентированные подходы к сетевому программированию и описываются достоинства и недостатки объектной технологии в целом.
Часть IV, "Сложные сетевые методики"
Рассматриваются сложные методики сетевого программирования, включая безопасность, широковещание и групповое вещание, стандарт IPv6 и низкоуровневые сокеты.
Часть V, "Приложения"
В приложения вынесен справочный материал, касающийся сокетов. В приложение А включены таблицы, которые слишком велики для основных глав. В приложениях Б и В описаны системные функции работы с сокетами и функции ядра.
На сопровождающем Web-узле содержатся исходные тексты всех примеров книги, приложения в формате HTML и PDF, а также различные RFC-документы в формате HTML.
Предпочтения профессионалов
Данная книга предназначена для профессиональных программистов. Обычно профессионалам нужно одно из трех: либо изучить новую технологию, либо решить конкретную задачу, либо найти нужные примеры или определения. Главы и приложения книги построены с учетом этих потребностей.
Последовательное чтение от начала до конца. В любом месте книги раскрывается какая-то одна методика. Каждый раздел и глава основаны на предыдущем материале. Вся книга организована по принципу нарастания сложности. Программирование сокетов может показаться поначалу довольно простой задачей. Однако с ним связано множество "подводных камней" и нюансов, пренебрежение которыми приведет к тому, что отличная программа на самом деле окажется неработоспособной.
Принцип обзора. Человек, читающий книгу, хочет быстро получить интересующую его информацию, не останавливаясь на чрезмерных деталях. Основные сведения у него уже есть, и он хочет сразу перейти к главному. Читатель может пропускать разделы до тех пор, пока не найдет то, что ему нужно.
Справочный материал. Экспертам, как правило, требуется быстро найти то, что им нужно (таблицы, фрагменты программ, описания API-функций). Эта информация должна быть лаконичной и легкодоступной.
Многие главы содержат врезки, в которых приводится вспомогательная информация, экспертные замечания и советы.
Что необходимо знать
В книге приводится много примеров программ, иллюстрирующих ту или иную методику. Чтобы работать с ними, необходимо знать следующее:
как создать исходный файл на языке C или Java (в любом доступном редакторе);
как скомпилировать полученный файл;
как запустить скомпилированную программу.
Некоторые примеры требуют модификации ядра (для режимов широковещания и группового вещания). В большинстве дистрибутивов Linux сетевая подсистема инсталлирована и запущена, даже если компьютер не подключен к сети. Чтобы иметь возможность запускать все программы, описанные в книге, необходимо:
уметь создавать и компилировать исходные тексты на языках C, C++ и Java;