如何防止python套接字消息在控制台中重叠?

时间:2019-03-08 14:33:03

标签: python sockets

我有一个Python聊天系统,该系统使用一个线程进行用户输入,并使用另一个线程进行消息接收和打印。问题是:如果我在接受用户输入的同时收到消息,则消息中的文本最终会出现在输入行中,而不是它自己的单独行中。我将如何处理呢?

我的代码的简短版本:

def receive(cl,buffer):
    msg = str(cl.recv(1024).decode())
    print(msg)

_thread.start_new_thread(receive,(client,1024,))

while True:
    msg = input("message:")
    send(message)

例如:如果我在控制台中编写“ hello服务器”时从服务器接收到“ hello world”,它将看起来像这样

“ hello world 消息:hello服务器”

2 个答案:

答案 0 :(得分:0)

理想情况下,使用两个不同的窗口进行输入和输出。考虑现有的聊天应用程序,其中有一个窗口来键入您的消息,而不是同时显示您的消息和其他用户的消息的窗口。否则,您可以在收到另一条消息时进行键入。

或者,使用threading.Lock()来序列化输出。只有持有锁的线程才能输出。不幸的是,如果您有:

with lock:
    msg = input('message: ')

在您键入完消息之前,其他任何线程都无法打印任何内容。使用单独的窗口进行输入和输出的另一个原因。

答案 1 :(得分:0)

我决定为系统创建GUI,以便可以在小部件中显示传入的消息并处理来自其他小部件的输入。