Sign inSign up

ktlo/net-chat

By ktlo

•Updated almost 6 years ago

Simple network chat

Image
0

1.2K

ktlo/net-chat repository overview

⁠Лабораторная №1 по Технологиям компьютерных сетей

В данном репозитории находится программа, имеющая клиентскую и серверную части. Программа служит средством обмена текстовыми сообщениями по сети Интернет посредством транспортного протокола TCP, который входит в стек протоколов TCP/IP... Чатик короч

⁠Публичный сервер

Я об этом пожалею, но подключаться можно сюда: handtruth.com:1338.

Например через образ докера

rlwrap docker run -i ktlo/net-chat client --address=handtruth.com --username=Kenobi

⁠Как использовать?

⁠Сервер
lab1-chat-server [опции]

Опции:

  • --address=ADDRESS IP адрес, который требуется прослушивать или путь до файла Unix сокета (по умолчанию localhost)
  • --port=PORT порт, который требуется прослушивать (по умолчанию 1338)
  • --max-paket-size=SIZE максимально разрешённый размер paket от клиента (по умолчанию 3000 байт)
  • --max-client-count=COUNT максимальное количество возможных клиентов (по умолчанию не ограничено)
  • --timeout=MILLIS таймаут до следующего признака жизни от клиента
  • -s, --single-login запретить нескольким клиентам иметь одинаковое имя пользователя
  • -S, --sync использовать блокирующие сокеты и многопоточный режим
  • --verb уровень логгирования (none, fatal, error, warning, info, verbose, debug)
  • -d синоним --verb=debug
  • -t, --tcp использовать TCP сокеты
  • -u, --unix использовать Unix сокеты
  • -v, --version показать код версии программы
  • -h, --help вывести краткую справку
⁠Клиент
rlwrap lab1-chat-client [опции]

Опции:

  • --address=ADDRESS имя хоста или путь до файла сокета, к которому следует подключиться (по умолчанию localhost)
  • --port=PORT номер TCP порта (по умолчанию 1338)
  • --username=USERNAME указать собственное имя для чата (случайное по умолчанию из набора)
  • --pulse=PULSE период по окончанию которого подаётся следующий признак жизни (подробности в описании протокола⁠)
  • -S, --sync использовать блокирующие сокеты и многопоточный режим
  • -t, --tcp использовать TCP сокеты
  • -u, --unix использовать Unix сокеты
  • -v, --version показать код версии программы
  • -h, --help вывести краткую справку

Утилита rlwrap используется для удобства ввода и получения сообщений чата. Чтобы отправить сообщение нужно его просто ввести и нажать enter.

Сообщения от сервера приходят сами.

⁠Образ Docker

Запуск сервера через Docker можно сделать так:

docker run -d --net-alias chat-server ktlo/net-chat \
  server -ts --verb=verbose --address 0.0.0.0

Запуск кллиента через Docker:

rlwrap docker run -i ktlo/net-chat \
  client --address chat-server --username Kenobi

⁠Как построить?

⁠Из исходного кода

Для сборки нам понадобятся:

apt install -y cmake g++ git python3 python3-pip ninja-build \
  && python3 -m pip install --user meson

Сборка осуществляется с помощью Meson⁠. Для сборки нужно выполнить следующую команду.

meson -Dbuildtype=release -Doptimization=3 build && cd build && ninja

Для установки в операционную систему можно выполнить:

ninja install

Чтобы удалить:

ninja uninstall
⁠Сборка образа Docker

Здесь всё просто

docker build -t chat .

⁠Особенности реализации

Программа совместима только с Linux операционными системами.

⁠Сервер

Использует 1 поток на всё про всё. И тут наверное тоже всё.

⁠Клиент

Также использует 1 поток и на чтение из stdin и на приём сообщений. Каждое сообщение -- это строка, полученная из stdin.

⁠Описание протокола

Прошу сюда⁠.

Tag summary

Content type

Image

Digest

Size

3.4 MB

Last updated

almost 6 years ago

docker pull ktlo/net-chat