Commit 184ebd1e authored by Kseniya Lysenko's avatar Kseniya Lysenko
Browse files

chat_template

parent 3b2df85f
Loading
Loading
Loading
Loading
+74 −0
Original line number Diff line number Diff line
Многопользовательский чат
=========================
Шаблон кода
--------------
Используя шаблон кода, напишите многопользовательский чат.
Сервер::

 import socket
 from threading import Thread
 
 # функция нужна для старта приёма сообщений
 def accept_incoming_connections():
     while True:
         client, client_address = sock.accept()
         # выведите информацию о подключении
         # попросите ввести имя
         # добавьте адрес клиента в словарь addresses
        
         Thread(target=handle_client, args=(client,)).start()

 # функция обрабатывает сообщения одного клиента
 def handle_client(client):
    
     # получите сообщение с именем клиента и поприветсвуйте его
     # используя функцию broadcast() напишите всем участникам чата, что к нему присоединился текущий клиент 
     broadcast(msg)
     # добавьте имя клиента в словарь clients (в качестве ключей - сокеты клиентов)

     # получайте сообщения от клиентов в чате
     while True:
         msg = client.recv(1024).decode("utf-8")
         print(msg)
         # используя функцию broadcast() отправляйте сообщения всем участникам чата

         # обработайте ситуацию выхода клиента из чата:
             #предупредите, что участник вышел из чата
             #закройте соединение
             #удалите участника из clients

 # функция отправляет сообщения всем клиентам
 def broadcast(msg, name =""):
     # отправляйте сообщения все клиентам из словаря clients

 clients = {}
 addresses = {}

 sock = socket.socket()
 sock.bind(("", 10001))
 sock.listen(5)
 print("Waiting for connection...")
 accept_thread = Thread(target=accept_incoming_connections)
 accept_thread.start()
 accept_thread.join()
 sock.close()

Клиент::

 import socket
 # создаем сокет
 # подключемся к серверному сокету
 
 while True:
     # читаем и выводим ответ от серверного сокета
     # просим ввести сообщение в чат
     # отправляем сообщение
     # обрабатываем ситуацию выхода из чата

 # закрываем соединение

Задачи
-------
1. Используя примеры кода напишите многопользовательский чат.
2. Добавьте к чату функцию send_file с возможностью отправлять файлы.
3. Добавьте интерфейс с помощью модуля easygui.