TransWikia.com

Как реализовать чат без сервера?

Stack Overflow на русском Asked by Ghost on December 18, 2020

Хочу создать простой консольный чат в одной сети Wi-Fi без подключения к интернету. Как это можно сделать? Что нужно загуглить?

2 Answers

Как вариант можно:

  1. Сканировать все ip локальной сети.
  2. Пройтись по активным ip опросить на запуск клиента.
  3. Составить список юзеров на основе пункта 2.
  4. Все можно слать сообщения.

Остается определиться с типом чата тет-а-тет или широковещательная рассылка всем пользователям.

Историю можно хранить у каждого клиенты в txt с временными маркерами и при коннекте синхронизировать или забить на нее и получать только текущие сообщения.
И тд. и тп. алгоритм можно улучшать разными фичами очень долго зависит от желания замарочиться.

Answered by Kers on December 18, 2020

Консольный локальный чат можно реализовать без сервера, сокетов и других библиотек. Это будет достаточно костыльный чат, но тем не менее работать будет как надо)

Как один из вариантов, вам понадобятся:

  1. Файл синхронизации сообщений, в котором всегда хранится последнее отправленное в чат сообщение
  2. Файл с историей сообщений, в который дописывается каждое новое сообщение и весь файл подгружается при запуске чата
  3. Главный файл чата - просто подгружает историю чата и отображает новые сообщения
  4. Консоль отправки сообщений - отдельное окно, в котором сначала вводится ник, с которым пользователь зайдет в чат, а затем оттуда отправляются последующие сообщения

Конечно, такой чат не позволит синхронизировать пользователей, т.е. в один чат одновременно сможет зайти хоть 10 человек с одинаковым ником и с одного компа. (хотя при желании и эту проблему можно решить)


Примерный алгоритм:

Главный файл чата: при первом запуске подгружает весь текст из файла с историей чата. Если текст в файле с последним сообщением изменился, значит было отправлено новое сообщение. Следовательно, при изменении текста в файле с последним сообщением - отображаем новое сообщение.

Консоль отправки: запрашивает логин для входа, после ввода в файл с последним сообщением записывается строка о том что такой-то пользователь заходит в чат и соответственно отображается в чате. Затем в цикле консоль запрашивает ввод через input('Сообщение>') и при каждом вводе отправляет текст в файл с последним сообщением. Выход из чата можно реализовать просто через закрытие окна консоли. Обработать это закрытие можно с помощью библиотеки win32api. То есть, при закрытии окна консоли отправки сообщений, если пользователь вводил ник и "авторизовался" в чате, будет выведено сообщение о том, что он покинул чат.


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

Надеюсь вам поможет моя идея, удачи :)

Answered by denisnumb on December 18, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP