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

Liubchenkova Anna 203 lab1a #15

Closed

Conversation

Anna-Lyubchenkova
Copy link

@Anna-Lyubchenkova Anna-Lyubchenkova commented Nov 11, 2020

Lab1a

Инструкция по использованию
Запустить в cmd.exe:

>python3 server.py
>python3 client.py

Описание используемого протокола
Имеется два типа пакетов: отправляемые от клиентов серверу и от сервера клиентам.
Формат пакетов, отправляемых от клиентов серверу:

Length_of_message Time Message

Формат пакетов, отправляемых от сервера клиентам:

Length_of_message Time Length_of_name Name Message

Размеры длин имен и сообщений фиксированные – 8 байт. Там содержатся числа, закодированные в utf-8, - длина имени и сообщения. Соответственно, максимально возможная длина сообщения - 10^8-1 символов. В случае ввода сообщения или имени пользователя длиной больше, чем 10^8-1 символов, будут получены только первые 10^8-1, а остальное отброшено. Размер времени тоже фиксирован, 5 байт, потому что мы используем только часы и минуты, разделенные двоеточием. Размеры настраиваются в самих файлах client.py и server.py с помощью соответствующей константы.
Первым сообщением после установления соединения является отправка клиентом имени пользователя, которое сервер запоминает, после чего отправляются сами сообщения. Таким образом, имя пользователя в дальнейшем отправлять не приходится и формат пакета от клиента серверу получается с длиной сообщения, временем и самим сообщением.
В случае с отправкой сообщения от сервера клиентам, передаётся: длина сообщения, время, длина имени, имя пользователя и само сообщение. Данные передаются всем клиентам, исключая самого себя.
Принцип работы получается следующим:

  1. На порту 7000 запускается сервер и ждёт TCP подключений от клиентов
  2. Клиент подключается к серверу и первым сообщением после подключения отправляет своё имя пользователя
  3. Сервер запоминает имя пользователя
  4. Клиент получает возможность отправлять сообщения в чат
  5. При отправке сообщения клиентом, сервер получает его, определяет имя пользователя, отправившего сообщение, и пересылает это сообщение всем остальным подключённым пользователям, в виде пакета, содержащего как имя пользователя, так и, собственно, сообщение.
  6. Клиенты получают сообщение от сервера, выделяют из него имя пользователя, время и текст сообщения, после это отображают результат на экране.

Сервер стартует, когда появляется сообщение: "Server is running".
Клиенты сначала вводят login, а затем, после сообщения: "Now you can start a conversation!" они могут начать общение.
Если клиент хочет выйти из чата, то нужно написать: "exit()"

@wrbbz wrbbz added the Доработать отчёт Отчёта нет или он не соответствует требованиям label Nov 26, 2020
@ejiektpobehuk
Copy link
Contributor

быть готовой рассказать про listen(5)

@ejiektpobehuk ejiektpobehuk added Зачтено and removed Доработать отчёт Отчёта нет или он не соответствует требованиям labels Dec 10, 2020
Ktlo pushed a commit to Ktlo/2020H2 that referenced this pull request Jan 5, 2021
Ktlo added a commit to Ktlo/2020H2 that referenced this pull request Jan 5, 2021
Sevent client done (insysnw-archive#15)

See merge request spbstu/net-lab3!19
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.

3 participants