Я недавно изучил основы Python.Я пытаюсь создать чат-комнату на основе CLI, используя библиотеку сокетов в Python.
У меня есть две функции для обработки отправки и получения сообщений двумя потоками, работающие одновременно.
Проблема
Небольшой фрагмент обеих функций:
def send(conn):
**msg = input()**
# ....
def recv(conn):
msg = str(conn.recv(1024), 'utf-8')
**print(msg)**
Дело в том, что если кто-то отправляет вам сообщение, пока вы печатаете, полученное сообщениепросто печатается и добавляется к любому сообщению, которое вы печатали.
Я попробовал несколько хакерских способов, таких как использование списка (который объявлен глобально) для ввода.Используя getch () (из msvcrt), я добавляю ввод в этот список, когда он набирается.
msg_arr = []
# ...
def send(conn):
letter = getch()
while letter != '\r':
msg_arr.append(letter)
Что меня заинтересовало, так это то, что теперь у меня была информация о длине текста в реальном времениэто было напечатано на экране.Таким образом, я могу использовать его в функции recv, чтобы сначала стереть столько символов с экрана, а затем распечатать сообщение.
def recv(conn):
msg = str(conn.recv(1024), 'utf-8')
print('\b' * len(msg_arr), end='')
print(msg, end='')
if len(msg) < len(msg_arr):
print(' ' * (len(msg_arr) - len(msg)), end='')
print('\n' + msg_arr)
Но код не работает.Может кто-нибудь предложить альтернативу?