Главная » Просмотр файлов » Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU)

Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (1130092), страница 150

Файл №1130092 Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU)) 150 страницаЭ. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (1130092) страница 1502019-05-12СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 150)

Транспортный уровень пользуемого при вызове следующих примитивов, подобно тому, как возвращает описатель файла процедура ОРЕМ. Таблица В.2. Примитивы сокетов для ТОР Значение Примитив Создать новый сокет (гнездо связи) Связать локальный адрес с сокетом Ооьявить о делании принять соединение; указать размер очереди Блокировать звонящего до получения попытки соединения Активно пытаться установить соединение Посылать данные по соединению Получать данные у соединения Разрывать соединение ВОСКЕТ(СОКЕТ) В(МО (СВЯЗАТЬ) (ЗВТЕМ (ОЖИДАТЬ) АССЕРТ(ПРИНЯТЬ) СОММЕСТ(СОЕДИНИТЬ) БЕМО(ПОСЛАТЬ) ВЕСЕ(УЕ(ПОЛУЧИТЬ) СьОВЕ (ЗАКРЫТЬ) У только что созданного сокета нет сетевых адресов. Они назначаются с помощью примитива В!МО.

После того как сервер привязывает адрес к сокету, с ним могут связаться удаленные клиенты, Вызов 50СКЕТ не создает адрес напрямую, так как некоторые процессы придают адресам большое значение (например, они использовали один и тот же адрес годами, и этот адрес всем известен), тогда как другим процессам это не важно. Следом идет вызов Е!5ТЕМ, который выделяет место для очереди входящих звонков на случай, если несколько клиентов попытаются соединиться одновременно. В отличие от примитива Е !5ТЕМ в нашем первом примере, примитив Е15ТЕМ гнездовой модели не является блокирующим вызовом. Чтобы заблокировать ожидание входящих соединений, сервер выполняет примитив АССЕРТ.

Получив ТРОЕ)-модуль с запросом соединения, транспортная сущность создает новый сокет с теми же свойствами, что и у исходного сокета, н возвращает описатель файла для него. При этом сервер может разветвить процесс или поток, чтобы обработать соединение для нового сокета и вернуться к ожиданию следующего соединения для оригинального сокета. Теперь посмотрим на этот процесс со стороны клиента. В этом случае также сначала с помощью примитива 50СКЕТ должен быть создан сокет, но примитив В1МО здесь не требуется, так как используемый адрес не имеет значения для сервеРа.

Примитив СОММЕСТ блокирует вызывающего и инициирует активный процесс соединения. Когда этот процесс завершается (то есть когда соответствующий ТР1)Е)-модулгч посланный сервером, получен), процесс клиента разблокируется и соединение считается установленным. После этого обе стороны могут использовать примитивы 5ЕМО и МЕСУ для передачи и получения даннькх по полнодуплексному соединению.

Могут также применяться стандартные 13Х1Х-вызовы ЙЕАО и ИМ!ТЕ, если нет нужды в использовании специальных свойств 5ЕМО и ВЕСУ. В модели сокетов используется симметричный разрыв соединения. Соединение разрывается, когда обе стороны выполняют примитив СЕО5Е Транспортная служба 669 Пример программирования сокета: файл-сервердля Интернета В качестве примера использования вызовов сокета рассмотрим программу, демонстрирующую работу клиента и сервера, представленную в листинге 6.1.

Имеется примитивный файл-сервер, работающий в Интернете и использующий его клиент. У программы много ограничений (о которых еще будет сказано), но, в принципе, данный код, описывающий сервер, может быть скомпилирован и запущен на любой 11)ч 1Х-системе, подключенной к Интернету. Код, описывающий клиента, может быть запущен с определенными параметрами. Это позволит ему получить любой файл, к которому у сервера есть доступ. Файл отображается на стандартном устройстве вывода, но, разумеется, может быть перенаправлен на диск или какому-либо процессу. Рассмотрим сперва ту часть программы, которая описывает сервер. Она начинается с включения некоторых стандартных заголовков, последние три из которых содержат основные структуры и определения, связаннгяе с Интернетом.

Затем 5ЕРЧЕР РОРТ определяется как 12 345. Значение выбрано случайным образом. Любое число от 1024 до 65 535 подойдет с не меньшим успехом, если только оно не используется каким-либо другим процессом. Понятно, что клиент и сервер должны обращаться к одному и тому же порту. Если сервер в один прекрасный день станет популярным во всем мире (что маловероятно, учитывая то, насколько он примитивен), ему будет присвоен постоянный порт с номером менее 1024, который появится на ааацапа.ото. В последующих двух строках определяются две необходимые серверу константы. Первая из них задает размер участка данных для файловой передачи.

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

Вызов вепзе1 полностью обнуляет структуру данных. Последующие три присваивания заполняют три поля этой структуры. Последнее из них содержит порт сервера. Функции лгол1 и лгопз занимаются преобразованием значений в стандартный формат, что позволяет программе нормально выполняться на машинах с представлением числовых разрядов как в возрастающем порядке (например, ЯРАРсС), так и в убывающем (например, Репг1цт). Детали их семантики здесь роли не играют. После этого сервером создается и проверяется на ошибки (определяется по з < 0) сокет. В конечной версии программы сообщение об ошибке может быть чуть более понятным.

Вызов зе1зосхор1 нужен для того, чтобы порт мог использоваться несколько раз, а сервер — бесконечно, обрабатывая запрос за запросом. теперь 1Р-адрес привязывается к сокету и выполняется проверка успешного завершения вызова Ецпб. Конечным этапом инициализации является вызов 11з1еп, свидетельствующий о готовности сервера к приему входящих вызовов и сообщающий системе о том, что нужно ставить в очередь до 00ЕОЕ 517Е вызовов, пока сервер обрабатывает текущий вызов.

При заполнении очереди прибытие новых запросов спокойно игнорируется. 560 Глава б. Транспортный уроввнь В этом месте начинается основной блок программы, который никогда не пропускается. Его можно остановить только извне. Вызов ассерС блокирует сервер на то время, пока клиент пытается установить соединение. Если вызов завершается успешно, ассерС возвращает дескриптор файла, который можно использовать для чтения и записи, аналогично тому, как файловые дескрипторы могут записываться и читаться в каналах. Однако, в отличие от однонаправленных каналов, сокеты двунаправлены, поэтому для чтения (и записи) данных из соединения надо использовать за (адрес сокета). После установки соединения сервер считывает имя файла. Если оно пока недоступно, сервер блокируется, ожидая его.

Получив имя файла, сервер открывает файл и входит в цикл, который читает блоки данных из файла и записывает их в сокет. Это продолжается до тех пор, пока не будут скопированы все запрошенные данные. Затем файл закрывается, соединение разрывается, и начинается ожидание нового вызова Данный цикл повторяется бесконечно. Теперь рассмотрим часть кода, описываюп1ую клиента. Чтобы понять, как работает программа, необходимо вначале разобраться, как она запускается. Если она называется с11епц ее типичный вызов будет выглядеть так: с11епС т!~тз.сз.чо.п! /езг/Гса/Г~1епаае >Г Этот вызов сработает только в том случае, если сервер расположен по адресу й1тв.св.чи.п1, файл охг/Гса/т1 1епаае существует и у сервера есть доступ для чтения этого файла. Если вызов произведен успешно, файл передается по Интернету и записывается на место 1, после чего клиентская программа заканчивает свою работу.

Поскольку серверная программа продолжает работать, клиент может запускать новые запросы на получение файлов. Клиентская программа начинается с подключения файлов и объявлений. Работа начинается с проверки корректности числа аргументов (згдс = 3 означает, что в строке запуска содержались имя программы и два аргумента). Обратите внимание на то, что агдт(Ц содержит имя сервера (например, 1111в.св.чи.п1) и переводится в 1Р-адрес с помощью деФозгЬупзае.

Для поиска имени функция использует ПХБ. Мы будем изучать технологию ПНЯ в главе 7. Затем создается и инициализируется сокет, после чего клиент пытается установить ТСР-соединение с сервером посредством соппесс. Если сервер включен, работает на указанной машине, соединен с БЕйтЕк РОйТ и либо простаивает, либо имеет достаточно места в очеРеди 11зйеп (очереди ожидания), то соединение с клиентом рано или поздно будет установлено. По данному соединению клиент передает имя файла, записывая его в сокет. Количество отправленных байтов на единицу превышает требуемое для передачи имени, поскольку нужен еще нулевой байт-ограничитель, с помощью которого сервер может понять, где кончается имя файла.

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

Эти две программы [как и другие материалы, связанные с этой книгой) можно найти на веб-сайте книги по адресу Пнр://ыпиш.ргепПв(!.согп/тапепЬацгп [ссылка рядом с изображением обложки). Их можно скачать и скомпилировать на любой []]х[[Х-системе [например, Бо[айз, Во[], [.(ппх). Делается зто с помощью следующих командных строк: сс -о с!тент с!тент.с -1зосиет -1пз! сс -о зегчег зегчег.с -1зосиет -1пз1 Программу для сервера можно запустить, просто набрав зегчег Клиентской программе нужны два аргумента, как описывалось ранее. На вебсайте можно найти и ч(гнус[отца-версии программ.

Характеристики

Тип файла
DJVU-файл
Размер
10,09 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6390
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее