Как получить данные с клиентского сервера

#python #sockets #chat #encode

Вопрос:

Как заставить сервер получать сообщения от клиента и отображать сообщение «{имя} отправить сообщение: {данные}»? Например, пользователь отправляет сообщение другому пользователю, и когда пользователь по имени Джон отправляет сообщение «Привет, Алиса, как дела?», в этот момент отобразится сервер — Джон отправит сообщение: Привет, Алиса, как дела? Я буду благодарен вам за помощь. Код ниже: сервер:

 import threading
import socket

HOST = '127.0.0.1'
PORT = 8888

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((HOST, PORT))

server.listen(15)
print(f'Server {HOST}:{PORT} start.')

users = []

def send_all(data):
    for user in users:
        user.send(data)

def listen_user(user):
    print('Listening user')
    
    while True:
        data = user.recv(1024)
        print(f'User sent {data}')

        send_all(data)

def start_server():
    while True:
        user_socket, addr = server.accept()
        users.append(user_socket)

        potok_info = threading.Thread(target=listen_user, args=(user_socket,))
        potok_info.start()


if __name__ == '__main__':
    start_server()
 

клиент:

 import socket
import time
import threading
import os

HOST = '127.0.0.1'
PORT = 8888

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((HOST, PORT))


def send_message():
    print('Enter name: ')
    name = input()
    while True:
        data = client.recv(1024)
        print(data.decode('utf-8'))
        msg = (f'{name} send message {data}')
        client.send(msg.encode('utf-8')) # this
        
        
def send_server():
    
    listen_thread = threading.Thread(target=send_message)
    listen_thread.start()

    while True:
        client.send(input('you: ').encode('utf-8'))

        

if __name__ == '__main__':
    os.system('clear')
    print('***** Welcome in Security Chat. *****')
    send_server()