Главная » Просмотр файлов » Варианты заданий

Варианты заданий (1114804), страница 5

Файл №1114804 Варианты заданий (Варианты заданий) 5 страницаВарианты заданий (1114804) страница 52019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

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

Так, клиентская программа может некоторые команды пользователя обрабатыватьсамостоятельно, не обращаясь при этом к серверу (например, программаможет запоминать статистику предыдущих циклов игры и выдавать ее позапросу пользователя).Решение с помощью двух процессов. Одно из возможных решений– использовать два процесса, один из которых будет читать пользовательский ввод и передавать готовые команды серверу, а второй – приниматьсообщения от сервера и выдавать информацию пользователю. При этомво избежание конфликтов желательно в первом процессе закрыть потокстандартного вывода, выполнив вызов close(1), а во втором – поток стандартного ввода, выполнив close(0).Это решение подходит, например, в случае, если клиентская программане поддерживает команд, выполняемых без обращения к серверу.

В противном случае процессу, отвечающему за ввод и передачу, чтобы отреагировать на введенную «внутреннюю» команду, потребуется возможность24записи в поток стандартного вывода, что в некоторых системах приводитк возникновению ошибочной ситуации.Решение на основе select(). Более корректное решение возможно с использованием уже знакомого читателю вызова select() (см. §2.3). В этомслучае отпадает потребность во втором процессе, т.к. операции чтения небудут блокировать основной процесс.

Как и при организации программысервера, можно ограничиться заданием только одного параметра – множества дескрипторов, для которых нас интересует готовность на чтение(readfds). Обработке в этом случае подлежат всего два дескриптора: дескриптор потока стандартного ввода (0) и дескриптор сокета.2.62.6.1Дополнительные сведенияПодробнее о порядке байт в целых числахПорядок байт в представлении целых чисел в памяти может варьироватьсяот одной архитектуры к другой. Архитектуры, в которых старший байтчисла имеет наименьший адрес, в англоязычной литературе обозначаютсятермином big-endian, а архитектуры, в которых наименьший адрес имеетмладший байт – little-endian7 .Чтобы сделать возможным взаимодействие по сети между машинами,имеющими разные архитектуры, принято соглашение, что передача целочисленной информации по сети всегда идет в прямом (big-endian) порядкебайт, т.е.

старший байт передается первым. Чтобы обеспечить переносимость программ на уровне исходного кода, в операционных системах семейства Unix введены стандартные библиотечных функции для преобразования целых чисел из формата данной машины (host byte order) в сетевой формат (network byte order). На машинах, порядок байт в архитектурекоторых совпадает с сетевым, эти функции просто возвращают свой аргумент, в ином случае они производят необходимые преобразования.

Вот этифункции:#include <netinet/in.h>unsigned long int htonl(unsigned long int hostlong);unsigned short int htons(unsigned short int hostshort);7«Термины» big-endians и little-endians введены Свифтом в книге “Путешествия Гулливера” и нарусский язык обычно переводились как тупоконечники и остроконечники. Аргументы в пользу тойили иной архитектуры действительно часто напоминают священную войну остроконечников с тупоконечниками.25unsigned long int ntohl(unsigned long int netlong);unsigned short int ntohs(unsigned short int netshort);Как можно догадаться, буква n в названиях функций означает network(т.е. сетевой порядок байт), буква h – host (порядок байт данной машины). Наконец, s обозначает короткие целые, а l – длинные целые числа.Таким образом, например, функция ntohl() используется для преобразования длинного целого из сетевого порядка байт в порядок байт, используемый на данной машине.2.6.2Как избежать “залипания” TCP-порта по завершении сервераЧасто при работе с сервером можно заметить, что после завершенияпрограммы-сервера ее некоторое время невозможно запустить с тем жезначением номера порта.

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

Для этого необходимо перед вызовом bind() выставить на будущем слушающем сокете опциюSO_REUSEADDR. Это делается с помощью системного вызова setsockopt():#include <sys/types.h>#include <sys/socket.h>int setsockopt(int sd, int level, int optname,const void *optval, int optlen);Параметр sd задает дескриптор сокета, level обозначает уровень (слой)стека протоколов, к которому имеет отношение устанавливаемая опция (вданном случае это уровень сокетов, обозначаемый константой SOL_SOCKET)Параметр optname задаёт “имя” (на самом деле, конечно, это номер, иличисловой идентификатор) устанавливаемой опции; в данном случае намнужна опция SO_REUSEADDR.Поскольку информация, связанная с нужной опцией, может иметь произвольную сложность, вызов принимает нетипизированный указатель назначение опции и длину опции (параметры optval и optlen соответственно).

Значением опции в данном случае будет целое число 1, так что следует завести переменную типа int, присвоить ей значение 1 и передать в26качестве optval адрес этой переменной, а в качестве optlen – выражениеsizeof(int). Таким образом, наш вызов будет выгдядеть так:int opt = 1;setsockopt(ls, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));2.7Рекомендации по тестированиюПроверку программы следует произвести в несколько этапов (тестов). Накаждом этапе вам потребуется несколько работающих командных интерпретаторов. Если вы используете систему XWindow, запустите несколькоэкземпляров программы xterm. Если вы предпочитаете работать с текстовой консолью, выполните вход в систему на нескольких виртуальных консолях одновременно8.1. Запустите программу-сервер. Убедитесь с помощью командыnetstat -an, что выбранный вами TCP-порт находится в состоянииLISTEN.

Если это так, в выдаче команды будет присутствовать примерно такая строка:tcp000.0.0.0:7000 0.0.0.0:* LISTEN(здесь 7000 – избранный вами номер порта).2. Прервите выполнение программы-сервера и запустите ее с другим номером порта (не забудьте, что порты с номерами 1..1023 для пользовательских процессов не доступны). Убедитесь, что теперь в состоянииLISTEN находится новый TCP-порт.3. Используя другой командный интерпретатор (в другом окне xterm’аили на другой консоли), запустите утилиту telnet.

В команой строке необходимо указать адрес и TCP-порт сервера. Если тестированиепроводится в рамках одной машины, в качестве IP-адреса можно использовать 127.0.0.1 (localhost) или 0. Например, если вы используетепорт 7000, команда будет выглядеть так:telnet 127.0.0.1 7000или так:8В системах Linux и FreeBSD переключение виртуальных консолей производится обычно комбинацией Alt-Fn, где n - номер консоли (1, 2, 3, ..., 12). Учтите, что не все консоли могут быть доступны.27telnet 0 7000Убедитесь, что связь установлена. Для этого запустите командуnetstat -an.

Если связь действительно установлена, в ее выдаче будут присутствовать примерно такие строки:tcptcp0000127.0.0.1:7000 127.0.0.1:6537 ESTABLISHED127.0.0.1:6537 127.0.0.1:7000 ESTABLISHEDздесь 7000 - номер порта вашего сервера, а 6537 - номер порта, используемого программой telnet (может оказаться любым числом, большим1023).4. Разорвите связь с сервером. Для этого нажмите комбинацию Ctrl-];должно появиться приглашение telnet>. Введите команду close и нажмите Enter.5. Убедитесь, что сервер по-прежнему слушает порт, как это описано нашаге 1.6. Прервите выполнение программы-сервера и запустите ее вновь.

Установите связь.7. Дайте команду чтения параметров. В ответ сервер должен сообщить,что к нему подключен один клиент и значение глобального счетчикаравно нулю.8. Несколько раз (например, трижды) дайте команду на увеличениесчетчика. Убедитесь, что команда чтения параметров выдает правильное значение глобального счетчика.9. Разорвите связь, убедитесь, что сервер по-прежнему слушает порт.Вновь установите связь.

Убедитесь, что глобальный счетчик не изменился, а число клиентов по-прежнему равно 1.10. Не разрывая связь, подключите к серверу еще несколько клиентов,запустив несколько экземпляров программы telnet. Убедитесь, чтосервер отвечает на команды всех клиентов.

Убедитесь, что число клиентов, выдаваемое сервером, соответствует числу реально подключенных клиентов.11. Дайте несколько раз команду на увеличение счетчика в одном клиенте, а команду на выдачу значений – в другом. Убедитесь, что значениесчетчика соответствующим образом меняется.2812. Разорвите связь с каждым из клиентов вразброс, начав с тех, чтобыли запущены в середине (т.е. не с первого и не с последнего). Послеотключения каждого клиента проверяйте корректность выдаваемогосервером количества клиентов.13.

После того, как все клиенты будут отключены, убедитесь, что серверпо-прежнему слушает порт. Попытайтесь подключиться к нему ещераз.14. Не разрывая связь с клиентом, прервите выполнение программысервера (при этом telnet сообщит о потере связи). Попробуйте снова запустить программу-сервер с тем же номером порта. Если это неудастся, обратитесь к §2.6.2.293Программирование логики игрыКогда низкоуровневая часть кода сервера готова, можно приступать к программированию самой игры. В настоящей главе собраны рекомендации повыполнению этого этапа задания.3.1Общие сведенияВесь сеанс игры выглядит следующим образом. Один из игроков запускаетигровой сервер (вашу программу). После этого все игроки запускают клиентскую программу (например, telnet) и устанавливают связь с сервером.В момент входа очередного игрока все игроки (в том числе и только чтовошедший) должны получить информационное сообщение о том, сколькоигроков к настоящему моменту соединилось с сервером и скольких ещесервер ожидает.Сервер должен дождаться входа нужного числа игроков, после чего начать игру.

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

Тип файла
PDF-файл
Размер
373,54 Kb
Высшее учебное заведение

Список файлов ответов (шпаргалок)

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