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

Conversation

Zaretskaya
Copy link

Инструкция по сборке/установке и использованию
Чат реализован на языке python, сборка не требуется.

Запуск сервера:
python chat_server.py (используется порт 1234)

Запуск клиента:
python chat_client.py [IP] [Port]

Размер Header-а фиксированный(5 байт). В нём содержится единственное число, закодированное в utf-8, - длина следующего за ним сообщения. Соответственно, максимально возможная длина сообщения - 10^5-1 символов. В случае ввода сообщения длиной больше, чем 10^5-1 символов, будут получены только первые 10^5-1, а остальное отброшено. Размер Header-а настраивается в самих файлах chat_client.py и chat_server.py с помощью соответствующей константы.

Так как имя пользователя тоже передаётся как обычное сообщение от клиента серверу, максимальная длина имени пользователя - 10^5-1 символов.

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

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

Принцип работы следующий:

  • На порту 1234 запускается сервер и ждёт TCP подключений от клиентов

  • Клиент подключается к серверу и первым сообщением после подключения отправляет своё имя пользователя

  • Сервер запоминает имя пользователя

  • Клиент получает возможность отправлять сообщения в чат

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

  • Клиенты получают сообщение от сервера, выделяют из него часть с именем пользователя и часть с текстом сообщения и отображают результат на экране.

  • При подключении клиентов к серверу (равно как и при их отключении) сервер отправляет от имени вошедшего (отключившегося) пользователя сообщение, говорящее о том, что пользователь с определённым именем вошёл в чат (покинул чат).

  • Пользователь может выйти из чата, завершив программу в терминале.

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