Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Сервер отправляет всем клиентам (Даже отправителю) то что написал отправитель. Как исправить? [RSS Feed]

#1 Апрель 5, 2021 17:51:59

ViRuss08
Зарегистрирован: 2021-01-23
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Сервер отправляет всем клиентам (Даже отправителю) то что написал отправитель. Как исправить?

Я делаю мессенджер на питоне, и столкнулся вот с такой проблемой: из клиента передается на сервер передается сообщение 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()
#####################################################################

Офлайн

  • Начало
  • » Network
  • » Сервер отправляет всем клиентам (Даже отправителю) то что написал отправитель. Как исправить?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version