gpt4 book ai didi

python - 多线程套接字 TCP 服务器

转载 作者:可可西里 更新时间:2023-11-01 02:42:05 27 4
gpt4 key购买 nike

我正在尝试实现一个简单的多线程 TCP 服务器。当只有一个连接的客户端时它工作得很好,但是当有两个客户端同时连接时,第一个客户端的线程有时会收到一条必须由第二个客户端接收的消息。如何处理他的问题?

class ClientThread(Thread):
def __init__(self, ip, port):
Thread.__init__(self)
self.ip = ip
self.port = port
#...

def run(self):
while True:
try:
data = conn.recv(1024)
#...
except ConnectionResetError:
break

TCP_IP = '0.0.0.0'
TCP_PORT = 1234
BUFFER_SIZE = 1024

tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpServer.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpServer.bind((TCP_IP, TCP_PORT))
threads = []

while True:
tcpServer.listen(4)
(conn, (ip, port)) = tcpServer.accept()
newthread = ClientThread(ip, port)
newthread.start()
threads.append(newthread)

for t in threads:
t.join()

最佳答案

我发现了错误。这里 data = conn.recv(1024) conn 是全局变量,所以它是最后连接的客户端的套接字,所有线程都试图从它接收数据.以下代码运行良好:

class ClientThread(Thread):
def __init__(self, ip, port, conn):
Thread.__init__(self)
self.ip = ip
self.port = port
self.conn = conn
#...

def run(self):
while True:
try:
data = self.conn.recv(1024)
#...
except ConnectionResetError:
break

........
newthread = ClientThread(ip, port, conn)

关于python - 多线程套接字 TCP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46992453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com