This repository was archived by the owner on Sep 9, 2021. It is now read-only.
Zaretsaya Lisa, lab1b, /70203 #127
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Инструкция по сборке/установке и использованию
Чат реализован на языке 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 подключений от клиентов
Клиент подключается к серверу и первым сообщением после подключения отправляет своё имя пользователя
Сервер запоминает имя пользователя
Клиент получает возможность отправлять сообщения в чат
При отправке сообщения клиентом, сервер получает его, определяет имя пользователя, отправившего сообщение, и пересылает это сообщение всем остальным подключённым пользователям, в виде пакета, содержащего как имя пользователя, так и, собственно, сообщение.
Клиенты получают сообщение от сервера, выделяют из него часть с именем пользователя и часть с текстом сообщения и отображают результат на экране.
При подключении клиентов к серверу (равно как и при их отключении) сервер отправляет от имени вошедшего (отключившегося) пользователя сообщение, говорящее о том, что пользователь с определённым именем вошёл в чат (покинул чат).
Пользователь может выйти из чата, завершив программу в терминале.