Код сервера находится в пакете 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
Сначала необходимо установить 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 >
Если удалось связаться с клиентом серверу и получение от него подтверждение или нет, если что-то пошло не так