我正在使用TCP在Python中制作一个小型测试服务器。套接字正在阻塞,但是我认为套接字与该问题无关。我知道当前的解决方案有点丑陋和混乱,但这是经过大量的测试和调整后才能看到有效的方法和无效的方法。
该函数在类中为每个客户端的线程中运行。
每个客户端(一个类)都具有一个名称和其他一些较早设置的无关内容。
问题是,无论何时我连接了两个或更多客户端,客户端变量都将设置为最后添加的客户端,在本例中为Computer2。您还可以看到index变量永远不会受到影响。
这是代码:
def recieveDataFromClient(self, sock, index):
while True:
client = self.clients[index]
recvStr = sock.recv(1024).decode()
if not recvStr:
break
if client.name:
print("got something from "+client.name+" on "+str(sock))
print("Clients:")
for client in self.clients:
print(client.name)
print("this client is: "+str(index)+" - "+self.clients[index].name+" aka "+client.name)
这是从Computer1发送时的输出:
got something from Computer1 on <socket.socket object, fd=1044, family=2, type=1, proto=0>
Clients:
Computer1
Computer2
this client is: 0 - Computer1 aka Computer2
这是从Computer2发送时的输出:
got something from Computer2 on <socket.socket object, fd=1100, family=2, type=1, proto=0>
Clients:
Computer1
Computer2
this client is: 1 - Computer2 aka Computer2
您不小心覆盖了client
变量:
client = self.clients[index] # You assign client here
recvStr = sock.recv(1024).decode()
if not recvStr:
break
if client.name:
print("got something from "+client.name+" on "+str(sock))
print("Clients:")
for client in self.clients: # You're stomping on it here
print(client.name)
# Now when you use client below, its whatever came last in the for loop.
print("this client is: "+str(index)+" - "+self.clients[index].name+" aka "+client.name)
只需在for循环中使用其他名称即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句