09 Курсовой проект.pptx
- Количество слайдов: 14
КУРСОВОЙ ПРОЕКТ
ЗАДАНИЕ НА ПЕРВУЮ ЧАСТЬ • опишите правила игры и алгоритм проведения игровой ситуации "крестики-нолики" (3 x 3) • с использованием библиотек My. Term и Big. Chars, разработайте набор функций: • print. Board (struct board); • set. Board. Pos (struct board, int, enum t. Pos. Sign); • get. Board. Pos (struct board, int, enum t. Pos. Sign *); • edit. Board (struct board *, int *) • Разработайте протокол взаимодействия клиентской и серверной частей приложения при: создании новой игры, подключении игроков к ранее созданной игре, проведении игровой ситуации и завершении её. Заложите возможность диалога игроков в режиме чата (через контролирующий сервер). • Реализуйте простейшую программу-сервер.
ЗАДАНИЕ НА ПЕРВУЮ ЧАСТЬ • опишите правила игры и алгоритм проведения игровой ситуации "крестики-нолики" (3 x 3) • с использованием библиотек My. Term и Big. Chars, разработайте набор функций: • print. Board (struct board); • set. Board. Pos (struct board, int, enum t. Pos. Sign); • get. Board. Pos (struct board, int, enum t. Pos. Sign *); • edit. Board (struct board *, int *) • Разработайте протокол взаимодействия клиентской и серверной частей приложения при: создании новой игры, подключении игроков к ранее созданной игре, проведении игровой ситуации и завершении её. Заложите возможность диалога игроков в режиме чата (через контролирующий сервер). • Реализуйте простейшую программу-сервер.
ПРАВИЛА ИГРЫ
ИНТЕРФЕЙС КЛИЕНТСКОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ • Использует библиотеки из курса «Организация ЭВМ и систем» (3, 4) • Экран делится на две части: игровое поле и окно диалога между игроками. Возможно использование дополнительных элементов интерфейса. Демонстрационный код доступен в сети Кафедры ВС: /home/STUDENTS/Lab. Works/kurs
ВЗАИМОДЕЙСТВИЕ МЕЖДУ УЗЛАМИ РАСПРЕДЕЛЁННОЙ СИСТЕМЫ Вопрос. Как узлы РС могут взаимодействовать друг с другом? Ответ. Только по средствам передачи сообщений. Вопрос. Что нужно реализовать, чтобы узлы РС «понимали» друга при передачи сообщений? Ответ. Принцип открытой системы.
ПРИЛОЖЕНИЯ ПРИКЛАДНОЙ 7 -Й УРОВЕНЬ ПРИКЛАДНОЙ ПРЕДСТАВИТЕЛЬСКИЙ 6 -Й УРОВЕНЬ ПРЕДСТАВИТЕЛЬСКИЙ СЕАНСОВЫЙ 5 -Й УРОВЕНЬ СЕАНСОВЫЙ ТРАНСПОРТНЫЙ 4 -Й УРОВЕНЬ ТРАНСПОРТНЫЙ СЕТЕВОЙ 3 -Й УРОВЕНЬ СЕТЕВОЙ КАНАЛЬНЫЙ 2 -Й УРОВЕНЬ КАНАЛЬНЫЙ ФИЗИЧЕСКИЙ 1 -Й УРОВЕНЬ СРЕДА ПЕРЕДАЧИ ФИЗИЧЕСКИЙ
ЗАПРОС ОТВЕТ ОБРАБОТКА Пассивная сторона взаимодействия Активная сторона взаимодействия Называется: клиентом Называется: сервером Передаёт серверу запрос, включающий требование выполнить какое-либо действие или выдать какую-либо информацию. Ожидает от клиента запрос, включающий требование выполнить какое-либо действие или выдать какую-либо информацию. Ожидает ответа от сервера. Получив запрос, сервер обрабатывает его соответствующим образом и выдает клиенту ответ, содержащий результат его действий. Клиент получает ответ от сервера.
Механизм сокетов #include
Сокет TCP/IP v 4 struct sockaddr_in { short int sa_family; u_int 16_t sin_port; struct in_addr sin_addr; } { u_int 32_t s_addr. }
ПРЯМОЙ И ОБРАТНЫЙ ПОРЯДОК БАЙТ Числа в памяти ЭВМ могут храниться в прямом и обратном порядке байт. При передачи информации необходимо гарантировать, что данные воспринимаются сторонами в одинаковом формате #include
«ЧЕЛОВЕЧЕСКОЕ» ПРЕДСТАВЛЕНИЕ СЕТЕВОГО АДРЕСА 192. 168. 1. 1 000000011010100011000000 #include
Пример клиента sockfd = socket (AF_INET, SOCK_STREAM, 0); bzero (&server, sizeof (struct sockaddr_in)); server. sin_family = AF_INET; server. sin_port = htons(7); inet_aton ("127. 0. 0. 1", &(server. sin_addr)); connect (sockfd, (struct sockaddr *)&server, sizeof (server)); write (sockfd, snd_line, strlen(snd_line)); read (sockfd, recv_line, 100); printf ("Принято %d байт [%s]. n", res, recv_line); close (sockfd);
Пример сервера sockfd = socket (AF_INET, SOCK_STREAM, 0); bzero (&server, sizeof (struct sockaddr_in)); server. sin_family = AF_INET; server. sin_port = htons(7); server. sin_addr. s_addr = htonl(INADDR_ANY); bind (sockfd, (struct sockaddr *) &server, sizeof (server)); listen (sockfd, 10); client_size = sizeof (struct sockaddr_in); clientfd = accept (sockfd, (struct sockaddr *)&client, &client_size); read (sockfd, recv_line, 100); write (sockfd, snd_line, strlen(snd_line)); printf ("Принято %d байт [%s]. n", res, recv_line); close (clientfd); close (sockfd);