Форум сайта python.su
Я делаю мессенджер на питоне, и столкнулся вот с такой проблемой: из клиента передается на сервер передается сообщение data, в котором указано время отправки, ник отправляющего и сам текст.
Эту переменную data сервер кидает всем клиентам, которые ее уже читают.
Так вот, проблема в том что, клиент, печатая все в инпут, оставляет у сабя то, что, он напечатал, и отправляет серверу, которы как было сказанно ранее, рассылает сообщение прям всем клиентам, в том числе и отправляющему. То есть получается как-то так:
Привет) # текст инпута
Джони228>Привет) #то что прислал всем клиентам сервак
АлахАкбр>Да, кстати, как тебе чашечка кота?)
Такой мягкий и немного жидкий кот) # текст инпута
Джони228>Такой мягкий и немного жидкий кот) #то что прислал всем клиентам сервак
АлахАкбр>Согласен!
Я так понимаю у этой проблемы два решения: стереть инпут у отправителя или чтобы сервер не слал отправителю по его нику. Только решение не одним не вторым способом я не знаю.
Так как в data который отсылает клиент серверу, все в куче, и разобрать где ник а где сам текст нельзя. Ниже код и клиента и сервера.
#####################################################################
КЛИЕНТ:
def listen_server(): while True: time1 = time.strftime("%Y-%m-%d(%H.%M.%S)", time.localtime()) data = client.recv(2048) print("["+time1+"] "+data.decode("utf-8")) def send_server(): listen_thread = Thread(target=listen_server) listen_thread.start() while True: client.send((" ").encode("utf-8")) client.send((name + "> " + input(":::")).encode("utf-8")) client.send((" ").encode("utf-8")) import socket, time from threading import Thread print("Твой код может состоять максимум из 8 символов, ид цифр и букв.") name = input("Введите код: ") n1 = len(name) if n1 > 8: name[0:8] if name == "123098": name = "Юра" if name == "112233": name = "Федя" run = True client = socket.socket( socket.AF_INET, socket.SOCK_STREAM, ) if run == True: client.connect( ("localhost", 25565) ) client.send((f"К нам присоединился {name}").encode("utf-8")) run = False if __name__ == '__main__': send_server()
def start(): while True: user, adress = server.accept() user.send("Ты подключен к чату!\n".encode("utf-8")) user.send("".encode("utf-8")) print(f"К нам присоединился <{adress}>!") if user not in users: users.append(user) listen_accepted_user = threading.Thread( target=listen_user, args=(user,) ) listen_accepted_user.start() def listen_user(user): while True: data = user.recv(2048) print(f">> {data}") send_all(data) def send_all(data): for user in users: user.send(data) import socket, threading server = socket.socket( socket.AF_INET, socket.SOCK_STREAM, ) server.bind( ("127.0.0.1", 25565) ) server.listen(5) users = [] if __name__ == '__main__': start()
Офлайн