-
Notifications
You must be signed in to change notification settings - Fork 1
/
subject.txt
69 lines (50 loc) · 9.75 KB
/
subject.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Глава I Общие Инструкции
• Ваша программа не должна аварийно завершать работу ни при каких обстоятельствах (даже когда у нее заканчивается память) и не должна неожиданно завершаться. Если это произойдет, ваш проект будет считаться нефункциональным и получит 0 во время оценки.
• Если субъект требует этого, вы должны отправить Makefile, который скомпилирует ваши исходные файлы в требуемый вывод. Ваш Makefile не должен повторно связываться.
• Your Makefile must at least contain the rules $(NAME),all,clean,fcleanandre.
• Чтобы включить бонусы для вашего проекта,вы должны включить в свой Makefile правило, которое добавит все различные заголовки, библиотеки или функции, которые могут быть запрещены в основной части проекта. Бонусы должны быть в разных файлах, четко идентифицированных по их названиям. Обязательная и бонусная части оценки проводятся отдельно.
• Мы рекомендуем вам создавать тестовые программы для вашего проекта, даже если эта работа не должна быть представлена и не будет оценена. Это даст вам возможность легко проверить свою работу и работу ваших коллег. Вы найдете эти тесты особенно полезными во время вашей защиты. Действительно, во время защиты вы можете свободно использовать свои тесты и/или тесты оцениваемого вами сверстника.
• Отправьте свою работу в назначенный вам репозиторий git. Оцениваться будет только работа в репозитории git. Если Deepthought назначается для оценки вашей работы,это будет сделано после вашей экспертной оценки. Если в каком-либо разделе вашей работы во время оценки deepthought произойдет ошибка, оценка прекратится.
Глава II введение
Internet Relay Chat или IRC - это текстовый коммуникационный протокол в Интернете. Это мгновенное общение в основном в форме дискуссий в группах через дискуссионные каналы, но также может быть использовано для общения один на один.Клиентские программы IRC подключаются к IRC-серверу для доступа к определенному каналу. IRC-серверы соединены между собой, чтобы обеспечить глобальную сеть с уникальными каналами.
Глава III обязательная часть
Program name: ircserv
External functs. : socket, open, close, setsockopt, getsockname,getprotobyname, gethostbyname, getaddrinfo,freeaddrinfo, bind, connect, listen, accept, htons,htonl, ntohs, ntohl, inet_addr, inet_ntoa, send,recv, exit, signal, lseek, fstat, read, write,fcntl, select, FD_CLR, FD_COPY, FD_ISSET, FD_SET, FD_ZERO
Description: Write an IRC server in C++
• Вы должны написать IRC-сервер на языке C++
• Эталонная версия C++ - C++98
• Следуйте инструкциям RFC 1459, 2810, 2811, 2812, 2813 и 7194
• Связь между клиентом и сервером должна осуществляться по протоколу TCP / IP (v4) или (v6)
• Вам не нужно будет кодировать клиента
• Вам нужно обрабатывать связь между серверами
• Можно включить и использовать все, что в "iostream" "string" "vector" "list" "queue""stack" "map" "algorithm"
• Вы можете использовать криптографическую библиотеку для обработки сообщений TLS
• В качестве бонусов вы можете использовать любую другую функцию, если ее использование полностью оправдано во время защиты. Будь умным.
• Ваш исполняемый файл будет использоваться следующим образом: ./ircserv [host:port_network:password_network] <port> <password>
◦ host - это имя хоста, к которому IRC должен подключиться, чтобы присоединиться к уже существующей сети
◦ port_network-это порт сервера, к которому IRC должен подключаться на host
◦ password_network-это пароль, необходимый для подключения на host
◦ port-это номер порта, по которому ваш сервер будет принимать входящие соединения.Добавьте один для порта TLS.
◦ password-это пароль, необходимый любому IRC-клиенту или серверу, который хочет подключиться к вашему серверу.
◦ Если host, port_network и password_network не заданы, вы должны создать новую IRC-сеть
• Сервер должен быть способен обрабатывать несколько клиентов одновременно, а также возможный сервер, и никогда не зависать. Разветвление не допускается, все операции ввода-вывода должны быть неблокирующими и использовать только 1 select for all (read, write, but also listen, ...)
Мы разрешили вам использовать fcntl, потому что MacOS X не реализует запись таким же образом, как другие операционные системы Unix.Вы должны использовать неблокирующий FD, чтобы получить результат, аналогичный другим операционным системам.
Поскольку вы используете неблокирующий FD, вы можете использовать функции read/recv или write/send без select, и ваш сервер не будет блокироваться. Но это потребляло бы больше системных ресурсов.Повторная попытка read/recv или write/send любой FD без прохождения select даст вам отметку, равную 0, и конец оценки.
Вы можете использовать fcntl только следующим образом: fcntl(fd, F_SETFL, O_NONBLOCK);любые другие флаги запрещены.
• Конечно, от вас ожидают, что вы создадите чистый код. Проверяйте абсолютно каждую ошибку и в тех случаях,когда у вас могут возникнуть проблемы (частичное получение данных, низкая пропускная способность...)
Чтобы убедиться, что ваш сервер правильно использует все, что вы отправляете, можно выполнить начальный тест с помощью nc(используйте ctrl+d для отправки частей команды):
\$> nc 127.0.0.1 6667
com^Dman^Dd
\$>
Это позволит вам сначала отправить символы com, man, d\n. Сначала вы должны объединить пакеты, чтобы перестроить команду command для ее обработки.
• Существует несколько IRC-клиентов, которые могут быть использованы для нескольких тестов и будут использоваться во время защиты.
• Для связи между серверами вам также потребуется взаимодействовать с общедоступным irc-сервером во время защиты.
Глава IV бонусная часть
Вот бонусы, которые вы можете добавить в свой IRC, чтобы сделать его ближе к реальному IRC. Конечно, если обязательная часть не идеальна, даже не думайте о бонусах.
• Клиент
• Конфигурационный файл с соответствующим изменением параметров командной строки
• Необязательные случаи RFC
• Графический интерфейс
• Передача файлов
• бот
• Полностью работоспособное соединение с публичной IRC-сетью.