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

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


我的代码的简短版本:


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 server”时从服务器收到“hello world”,它看起来像这样


“你好世界消息:你好服务器”


哔哔one
浏览 129回答 2
2回答

千万里不及你

理想情况下,输入和输出使用两个不同的窗口。考虑现有的聊天应用程序,其中有一个窗口来键入您的消息,与显示您的消息和其他用户的消息的窗口分开。否则,您可以在输入另一条消息时输入。或者,使用 athreading.Lock()来序列化输出。只有持有锁的线程才能输出。不幸的是,如果您有:with lock:     msg = input('message: ')在您完成输入消息之前,没有其他线程可以打印任何内容。使用单独的窗口进行输入和输出的另一个原因。

aluckdog

我决定为系统制作一个 GUI,这样我就可以在一个小部件中显示传入的消息并处理来自另一个小部件的输入。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python