Loading year2/source/lessons/10_chat 0 → 100644 +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. Loading
year2/source/lessons/10_chat 0 → 100644 +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.