Skip to content
This repository has been archived by the owner on Sep 9, 2021. It is now read-only.

Liubchenkova Anna 203 lab3s #53

Closed

Conversation

Anna-Lyubchenkova
Copy link

@Anna-Lyubchenkova Anna-Lyubchenkova commented Dec 15, 2020

Lab 3s Система поиска/публикации новостей

Linux terminal:

gcc -o server -pthread server.c
./server

Задание:
Новости сгруппированы по темам. Каждая новость имеет уникальный идентификатор, название и текст новости.

Основные возможности.
Серверное приложение должно реализовывать следующие функции:

  1. Прослушивание определенного порта
  2. Обработка запросов на подключение по этому порту от клиентов
    системы поиска/публикации новостей
  3. Поддержка одновременной работы нескольких клиентов системы
    поиска/публикации новостей через механизм нитей
  4. Прием запросов от клиента на передачу списка тем, списка новостей
    по теме, текста новости, добавление новости по теме
  5. Осуществление добавления тем, новостей по темам
  6. Передача списков тем, списков новостей и текстов новостей
  7. Обработка запроса на отключение клиента
  8. Принудительное отключение клиента

Основные возможности:

  1. Отправить список тем
  2. Отправить список новостей по теме
  3. Отправить новость по теме
  4. Записать тему
  5. Записать новость

Структура описывающая новость

  | typedef struct{
  | int id; //id
  | char *name; // Имя новости
  | char *textNews; // текст новости
  | char *themes; // К какой теме принадлежит новость
  |  
  | } news;
  |  
  | //Массив новостей
  | news massNews[maxNews];

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

Формат пакетов ответа сервера клиенту:

flag CountTheme lengtheme theme

Флаг = 0x00000081 – вывод тем
CountTheme - int(4 байта) Количество тем
Дальше в пакет идут n сегментов: Длина темы и имя темы
Lengtheme - int(4 байта)
theme - массив однобайтных символов
2.

flag CountNews ID lengthNews nameNews

Флаг = 0x00000082 – вывод списка новостей
CountNews- int (4 байта) Количество новостей
Дальше в пакет идут n сегментов: ID, длина новости и заголовок.
ID - int (4 байта)
LengthNews - int (4 байта)
nameNews - массив однобайтных символов

flag lenghtName newsName LengthText newsText LengthTheme Theme

Флаг = 0x00000083 - вывод новости
Длина имени новости
Заголовок новости
Длина текста
Сам текст
Длина темы
Сама тема
LengthName, LengthText, LengthTheme - int (4 байта)
newsName, newsText, Theme - массив однобайтных символов

flag

Флаг = 0x00000084 - успешное добавление данных

flag

Flag = 0x000000C5 - ошибка, новость не найдена

@ejiektpobehuk
Copy link
Contributor

  • Разделить коды запросов и ошибок.
  • Добавить в описание протокола форматы представления данных

@ejiektpobehuk
Copy link
Contributor

ps. хорошо бы обращаться к ресурсам по ID, а не по имени

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants