Skip to content

qwembe/tcpchat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Report

Исходный код приложения.

Код сервера находится в пакете tcp/server

Код клиента находится tcp/client

Пример приложения находится в main.py

from tcp.client import MyTCPClient, MyClientTCPHandler
from tcp.server import MyTCPServer, MyServerTCPHandler

flag = "server"

if flag == "server":
    with open("syslog", "a") as log:
        with MyTCPServer((HOST, PORT), MyServerTCPHandler, bind_and_activate=True) as server_socket:
            server_socket.myinit(log)
            server_socket.serve_forever()
else:
    with MyTCPClient((HOST, PORT), MyClientTCPHandler, bind_and_activate=True) as client_socket:
        client_socket.serve_forever()

Список используемых библиотек

Для использования не требуются посторонние зависимости
Список ключевых используемых модулей -

  • socketserer
  • socket
  • threading
  • json
  • selectors

Инструкция по установке

Общее

Чат будет работать везде, где можно установить python 3.6+ Можно добавить модули в virtualenv via pip

pip install -e git+https://github.com/qwembe/tcpchat#egg=tcpchat

Oracle linux

Сначала необходимо установить python 3.9 и pip

sudo dnf module install -y python39
sudo dnf install -y python39-pip

Затем убедится, что есть git

sudo dnf install -y git

Установим виртуальную среду

python3.9 -m venv tcpchat
source tcpchat/bin/activate

Установка модуля

python3.9 -m pip install -e git+https://github.com/qwembe/tcpchat#egg=tcpchat

Описание утилит

Модуль tcp состоит из двух *.py файлов: server.py & client.py

src\
    README.md
    main.py
    setup.py
    tcp\
        __init__.py
        client.py
        server.py

В модуле main.py показан пример использования утилит

Клиент

Для того, чтобы использовать клиента необходимо импортировать следующие объекты -

from tcp.client import MyTCPClient, MyClientTCPHandler

Пример кода для запуска клиента -

with MyTCPClient((HOST, PORT), MyClientTCPHandler, bind_and_activate=True) as client_socket:
    client_socket.serve_forever()
  • MyTCPClient - объект, отвечающий за обеспечение соединения
  • (HOST, PORT) - адрес сервера {Пример ("localhost", 6060)}
  • MyClientTCPHandler - класс, для обработки сообщений

Сервер

Импорт -

from tcp.server import MyTCPServer, MyServerTCPHandler

Использование -

with open("syslog", "a") as log:
    with MyTCPServer((HOST, PORT), MyServerTCPHandler, bind_and_activate=True) as server_socket:
        server_socket.myinit(log)
        server_socket.serve_forever()
  • MyTCPServer - Сервер
  • (HOST, PORT)
  • MyServerTCPHandler - Отвечает за инициацию/поддержку/обработку соединения
  • .myinit(log) - где log файл - это файл, куда сохраняются сообщения от клиентов

Пример использования -

Сперва запускаем сервер

$ python main.py 
Usage python <server|client> <Host> <Port:int>
server (HOST,PORT) set to (localhost,6060)

Видим, что он установлен и готов по адресу (localhost,6060)

Подключаем клиента -

$ python main.py client                                                     
client (HOST,PORT) set to (localhost,6060)
Enter login: {Ваш логин}
< Server is WAIT4CLIENTS >
< Hi! I'm a menu. Enter a command >
1. Is server available?
2. Who available?
3. Send to available client
4. Send message to all
5. Close connection

Первое, что нужно сделать клиенту - это ввести логин (Так Вас будут видеть другие клиенты и сервер)

Сразу после соединения выводится статус сервера : WAIT4CLIENTS.Это значит, что сервер ожидает еще одного клиента.

Также сперва пользователь видит меню, которое блокирует получение новых сообщений от сервера. Чтобы его отключить надо, либо ввести опцию, либо нажать Enter

< Waiting for messages ... >
< press <enter> to see menu: >
Big Brother  : I'm watching you ...

Чтобы отправить сообщение, необходимо узнать логин того, кому вы собираетесь отправить сообщение

< Hi! I'm a menu. Enter a command >
1. Is server available?
2. Who available?
3. Send to available client
4. Send message to all
5. Close connection
2
< Waiting for messages ... >
< press <enter> to see menu: >
Users:
duck; Big Brother                   <- Кто доступен

Чтобы отправить сообщение, надо ввести логин адресата и само сообщение

< Hi! I'm a menu. Enter a command >
1. Is server available?
2. Who available?
3. Send to available client
4. Send message to all
5. Close connection
3
Enter login: duck                    <- логин
Enter message: *quack*               <- сообщение
< Waiting for messages ... >
< press <enter> to see menu: >
< Message have been delivered! >  =) <- сообщение было доставлено

Вы увидите сообщение

< Message have been delivered! >
или 
< Message sending failure >

Если удалось связаться с клиентом серверу и получение от него подтверждение или нет, если что-то пошло не так

About

TCPchat - server & client - via socketserver

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages