【发布时间】:2020-03-20 04:27:34
【问题描述】:
我正在开发一个基于 GUI 的聊天程序。
我正在使用其他人的服务器,该服务器对很多人都运行良好,所以我假设问题出在我客户的代码上。
当我运行客户端的单个实例时,它可以完美运行,但是如果我在同一台计算机上运行客户端的两个实例,则侦听器会在第二个客户端登录时停止响应。
# server is from socket module
# chat_box is a tkinter ListBox
# both are copies of global variable
class listener_thread(threading.Thread):
def __init__(self, server, chat_box):
super(listener_thread, self).__init__()
self.server = server
self.chat_box = chat_box
def run(self):
try:
update = self.server.recv(1024)
msg = update.decode("utf-8")
if msg != "":
self.chat_box.insert(END, msg)
except Exception as e:
print(e)
我已验证服务器将每个客户端放在不同的端口上。服务器正在接收消息。当“迈克尔”登录并说“嗨”时,它会在他的聊天框中更新。
不过,在“戴夫”登录后,客户不再更新他们的历史记录。
然而,服务器继续显示它正在接收来自两个客户端的消息。
#This is the server output
#Hi is Michael
#Yo is Dave
#So Michael is still connecting and transmitting after Dave connects
Michael - ('127.0.0.1', 56263) connected
Hi
Dave - ('127.0.0.1', 56264) connected
Yo
Hi
网络连接正常。它只是锁定 list_box 更新线程。
没有异常被抛出。
【问题讨论】:
标签: python-3.x multithreading sockets tkinter